#include <bits/stdc++.h>
using namespace std;
const int MOD = 1073741824;
int prim[2010];
bool ok[2010];
int cntpri = 0;
int a, b, c;
map<int, long long> f[4010101];
int p[4010101], rm[4010101], cnt[4010101];
int d[4010101];
void preprim() {
  for (int i = 2; i <= 2000; ++i) {
    if (!ok[i]) {
      prim[++cntpri] = i;
      for (int j = i + i; j <= 2000; j += i) {
        ok[j] = true;
      }
    }
  }
}
int getd(int x) {
  if (x == 1) return 1;
  if (d[x]) return d[x];
  long long dx = 1;
  int x1 = x;
  int now = 1;
  int cnt1 = 0;
  while (x >= prim[now]) {
    if (now > cntpri) break;
    if (x % prim[now] == 0) {
      cnt1 = 0;
      while (x % prim[now] == 0) {
        x /= prim[now];
        cnt1++;
      }
      dx = 1LL * getd(x) * (cnt1 + 1);
      dx %= MOD;
      d[x1] = dx;
      return d[x1];
    }
    now++;
  }
  return d[x1] = 2;
}
int f1(int x, int y) {
  if (!y) return 0;
  if (f[x][y]) return f[x][y];
  if (y == 1) return f[x][y] = getd(x);
  if (x == 1) {
    f[x][y] = 0;
    for (int i = 1; i <= y; ++i) f[x][y] += getd(i);
    f[x][y] %= MOD;
    return f[x][y];
  }
  f[x][y] =
      1LL * f1(rm[x], y) * (cnt[x] + 1) - 1LL * f1(rm[x], y / p[x]) * cnt[x];
  f[x][y] %= MOD;
  return f[x][y];
}
long long ans = 0;
int main() {
  ios::sync_with_stdio(false);
  cin >> a >> b >> c;
  preprim();
  int x1, x2;
  for (int i = 1; i <= c; ++i) f[1][i] = f1(1, i);
  ans = f[1][c];
  for (int i = 1; i <= a; i++) {
    for (int j = 1; j <= b; ++j) {
      x1 = i * j;
      if (x1 == 1) continue;
      for (p[x1] = 1; p[x1] <= cntpri; ++p[x1]) {
        if (x1 % prim[p[x1]] == 0) {
          p[x1] = prim[p[x1]];
          break;
        }
        if (p[x1] == cntpri) {
          p[x1] = x1;
          break;
        }
      }
      cnt[x1] = 0;
      x2 = x1;
      while (x2 % p[x1] == 0) {
        cnt[x1]++;
        x2 /= p[x1];
      }
      rm[x1] = x2;
      ans += f1(x1, c);
      ans %= MOD;
    }
  }
  cout << ans << endl;
  return 0;
}
