#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 50, L = 5000;
int n, A, B, C, mnpr[N], pr[N], pt, npr[N], cpr[N][N], tot;
unsigned int c[N][N], mu[N];
inline int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
inline void sieve() {
  mnpr[1] = mu[1] = 1;
  for (int i = 2; i <= L; i++) {
    if (!npr[i]) {
      mnpr[i] = i;
      mu[i] = -1;
      pr[++pt] = i;
    }
    for (int j = 1; j <= pt; j++) {
      int k = i * pr[j];
      if (k > L) break;
      npr[k] = 1;
      mnpr[k] = pr[j];
      if (!(i % pr[j])) {
        mu[k] = 0;
        break;
      } else
        mu[k] = -mu[i];
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (mnpr[j] == j)
        cpr[i][j] = (gcd(i, j) == 1);
      else
        cpr[i][j] = cpr[i][mnpr[j]] && cpr[i][j / mnpr[j]];
  for (int x = 1; x <= n; ++x) {
    for (int i = 1; i <= n; ++i)
      if (cpr[i][x])
        for (int m = i; m <= n; m += i) c[x][m]++;
    for (int i = 1; i <= n; i++) c[x][i] += c[x][i - 1];
  }
}
int main() {
  cin >> A >> B >> C;
  n = max(A, B);
  n = max(n, C);
  sieve();
  unsigned int ans = 0;
  for (int i = 1; i <= A; i++) {
    unsigned int rs = 0;
    for (int d = 1; d <= min(B, C); ++d)
      if (cpr[i][d]) rs += mu[d] * c[i][B / d] * c[i][C / d];
    ans += rs * (A / i);
  }
  ans &= ((1 << 30) - 1);
  cout << ans;
}
