Защо long-a ми превърта?
using System;
class Program
{
    static void Main()
    {
        int a = 1000000;
        int b = 1000000;
        long c = a * b;
        Console.WriteLine(c);  //overflow
        int a1 =  1000000;
        long b1 = 1000000;
        long c1 = a1 * b1;
        Console.WriteLine(c1);  //correct
    }
}
Нали уж long-а приема произведението на два int-а, които не го препълват.