func_code_string: #include <bits/stdc++.h>   int last[1000100], next[1000100];   long long val[1000100];   int cnt[1000100];   int c[3010];   int prime[3010], top, pp, tmp;   inline void add(long long s, int &ss) {     val[++top] = s;     cnt[top] = ss;     s %= 1000007;     next[top] = last[s];     last[s] = 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;     if (x > y) {       tmp = x;       x = y;       y = tmp;     }     if (x > z) {       tmp = x;       x = z;       z = tmp;     }     if (y > z) {       tmp = y;       y = z;       z = tmp;     }     long long s = ((((long long)((x << 11) | y) << 11) | z) << 9) | 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);     while (pp && prime[pp] > x && prime[pp] > y && prime[pp] > z) --pp;     printf( %d n , f(x, y, z, pp));     return 0;   }   