#include <bits/stdc++.h>
int last[1000100], next[10000100];
long long val[10000100];
int cnt[10000100];
int c[2010];
int prime[2010], top, pp;
inline void add(long long &s, int &ss) {
  val[++top] = s;
  cnt[top] = ss;
  next[top] = last[s % 1000007];
  last[s % 1000007] = top;
}
inline int find(long long &x) {
  for (int i = last[x % 1000007]; i; i = next[i])
    if (x == val[i]) return cnt[i];
  return -1;
}
int f(int x, int y, int z, int p) {
  if (p == 0) return 1;
  long long s = ((long long)(x * 2001 + y) * 2001 + z) * (pp + 1) + p;
  if (~find(s)) return find(s);
  int a, b, c, aa, bb, cc, ret = 0;
  for (a = 0, aa = 1; aa <= x; ++a, aa *= prime[p])
    for (b = 0, bb = 1; bb <= y; ++b, bb *= prime[p])
      for (c = 0, cc = 1; cc <= z; ++c, cc *= prime[p])
        ret = ((long long)(a + b + c + 1) * f(x / aa, y / bb, z / cc, p - 1) +
               ret) &
              1073741823;
  add(s, ret);
  return ret;
}
int main() {
  int i, j, x, y, z;
  for (i = 2; i <= 2000; ++i)
    if (c[i] == 0) {
      prime[++top] = i;
      for (j = i * i; j <= 2000; j += i) c[j] = 1;
    }
  pp = top;
  top = 0;
  scanf("%d%d%d", &x, &y, &z);
  printf("%d\n", f(x, y, z, pp));
  return 0;
}
