#include <bits/stdc++.h>
using namespace std;
const int maxn = 2008, mod = 1 << 30;
unordered_map<long long, int> M[308];
int A, B, C, p[maxn], tot;
long long ans;
bool isp[maxn];
void GetPrime() {
  fill(isp + 2, isp + 2001, true);
  for (int i = 2; i <= 2000; i++) {
    if (isp[i]) p[tot++] = i;
    for (int j = 0; j < tot && p[j] * i <= 2000; j++) {
      isp[p[j] * i] = false;
      if (i % p[j] == 0) break;
    }
  }
}
long long Calc(int a, int b, int c, int np) {
  if (np == -1) return 1;
  int r = p[np];
  long long rep = 0;
  long long hh = 2003ll * 2003ll * a + 2003ll * b + c;
  if (rep = M[np][hh]) return rep;
  for (int i = 1, x = 0; i <= a; i *= r, x++)
    for (int j = 1, y = 0; j <= b; j *= r, y++)
      for (int k = 1, z = 0; k <= c; k *= r, z++)
        rep += Calc(a / i, b / j, c / k, np - 1) * (x + y + z + 1);
  return M[np][hh] = rep;
}
int main() {
  scanf("%d%d%d", &A, &B, &C);
  GetPrime();
  printf("%d", (Calc(A, B, C, tot - 1) % mod + mod) % (1 << 30));
  return 0;
}
