オーバーフローを起こさずにint/Integer同士の積を求めたい場合、BigMulメソッドを用いることができます。 このメソッドは二つのint/Integerを引数にとり、それらの積をlong/Long型で返します。

Math.BigMulメソッドを使ってオーバーフローを起こさずに32ビット整数同士の積を求める
using System;

class Sample {
  static void Main()
  {
    int a = int.MaxValue;
    int b = 2;

    Console.WriteLine("{0} * {1} = {2}", a, b, Math.BigMul(a, b));

    // 同じ値の積を*演算子で求めるとオーバーフローとなる
    Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
  }
}
オーバーフローのチェックを有効にしている場合
2147483647 * 2 = 4294967294

ハンドルされていない例外: System.OverflowException: 算術演算の結果オーバーフローが発生しました。
   場所 Sample.Main()
オーバーフローのチェックを無効にしている場合
2147483647 * 2 = 4294967294
2147483647 * 2 = -2

オーバーフローのチェックの有効/無効の切り替えやその際の動作の違いなどについては整数型のオーバーフローとチェックを参照してください。