#include <bits/stdc++.h>
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int a,b,c;
    if(!(cin>>a>>b>>c)) return 0;
    int N = max({a,b,c});
    vector<int> primes;
    vector<bool> is(N+1,true);
    is[0]=is[1]=false;
    for(int i=2;i*i<=N;i++) if(is[i]) for(long long j=1LL*i*i;j<=N;j+=i) is[(int)j]=false;
    for(int i=2;i<=N;i++) if(is[i]) primes.push_back(i);
    sort(primes.rbegin(), primes.rend());
    vector<vector<int>> pw;
    pw.reserve(primes.size());
    for(int p:primes){
        vector<int> v(1,1);
        long long x=1;
        while(x<=N/p){
            x*=p;
            v.push_back((int)x);
        }
        pw.push_back(move(v));
    }
    const uint32_t MASK = (1u<<30)-1u;
    auto pack = [](int x,int y,int z)->uint64_t{
        return (uint64_t)x<<28 | (uint64_t)y<<14 | (uint64_t)z;
    };
    unordered_map<uint64_t,uint32_t> cur, nxt;
    cur.reserve(1024);
    cur[pack(a,b,c)] = 1u;
    for(size_t idx=0; idx<primes.size(); ++idx){
        const vector<int>& pws = pw[idx];
        nxt.clear();
        nxt.reserve(cur.size()*2+1024);
        for(auto &it: cur){
            uint64_t key=it.first;
            uint32_t val=it.second;
            int x = (int)(key>>28);
            int y = (int)((key>>14)&((1<<14)-1));
            int z = (int)(key & ((1<<14)-1));
            int ex_max = upper_bound(pws.begin(), pws.end(), x) - pws.begin() - 1;
            int ey_max = upper_bound(pws.begin(), pws.end(), y) - pws.begin() - 1;
            int ez_max = upper_bound(pws.begin(), pws.end(), z) - pws.begin() - 1;
            for(int ex=0; ex<=ex_max; ++ex){
                int nx = x / pws[ex];
                for(int ey=0; ey<=ey_max; ++ey){
                    int ny = y / pws[ey];
                    for(int ez=0; ez<=ez_max; ++ez){
                        int nz = z / pws[ez];
                        uint64_t k2 = pack(nx,ny,nz);
                        uint32_t add = (uint32_t)(((uint64_t)val * (uint32_t)(ex+ey+ez+1)) & MASK);
                        auto it2 = nxt.find(k2);
                        if(it2==nxt.end()) nxt.emplace(k2, add);
                        else { it2->second += add; it2->second &= MASK; }
                    }
                }
            }
        }
        cur.swap(nxt);
    }
    uint32_t ans = 0;
    for(auto &it: cur){ ans += it.second; ans &= MASK; }
    cout << ans << '\n';
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgYSxiLGM7CiAgICBpZighKGNpbj4+YT4+Yj4+YykpIHJldHVybiAwOwogICAgaW50IE4gPSBtYXgoe2EsYixjfSk7CiAgICB2ZWN0b3I8aW50PiBwcmltZXM7CiAgICB2ZWN0b3I8Ym9vbD4gaXMoTisxLHRydWUpOwogICAgaXNbMF09aXNbMV09ZmFsc2U7CiAgICBmb3IoaW50IGk9MjtpKmk8PU47aSsrKSBpZihpc1tpXSkgZm9yKGxvbmcgbG9uZyBqPTFMTCppKmk7ajw9TjtqKz1pKSBpc1soaW50KWpdPWZhbHNlOwogICAgZm9yKGludCBpPTI7aTw9TjtpKyspIGlmKGlzW2ldKSBwcmltZXMucHVzaF9iYWNrKGkpOwogICAgc29ydChwcmltZXMucmJlZ2luKCksIHByaW1lcy5yZW5kKCkpOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBwdzsKICAgIHB3LnJlc2VydmUocHJpbWVzLnNpemUoKSk7CiAgICBmb3IoaW50IHA6cHJpbWVzKXsKICAgICAgICB2ZWN0b3I8aW50PiB2KDEsMSk7CiAgICAgICAgbG9uZyBsb25nIHg9MTsKICAgICAgICB3aGlsZSh4PD1OL3ApewogICAgICAgICAgICB4Kj1wOwogICAgICAgICAgICB2LnB1c2hfYmFjaygoaW50KXgpOwogICAgICAgIH0KICAgICAgICBwdy5wdXNoX2JhY2sobW92ZSh2KSk7CiAgICB9CiAgICBjb25zdCB1aW50MzJfdCBNQVNLID0gKDF1PDwzMCktMXU7CiAgICBhdXRvIHBhY2sgPSBbXShpbnQgeCxpbnQgeSxpbnQgeiktPnVpbnQ2NF90ewogICAgICAgIHJldHVybiAodWludDY0X3QpeDw8MjggfCAodWludDY0X3QpeTw8MTQgfCAodWludDY0X3QpejsKICAgIH07CiAgICB1bm9yZGVyZWRfbWFwPHVpbnQ2NF90LHVpbnQzMl90PiBjdXIsIG54dDsKICAgIGN1ci5yZXNlcnZlKDEwMjQpOwogICAgY3VyW3BhY2soYSxiLGMpXSA9IDF1OwogICAgZm9yKHNpemVfdCBpZHg9MDsgaWR4PHByaW1lcy5zaXplKCk7ICsraWR4KXsKICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiYgcHdzID0gcHdbaWR4XTsKICAgICAgICBueHQuY2xlYXIoKTsKICAgICAgICBueHQucmVzZXJ2ZShjdXIuc2l6ZSgpKjIrMTAyNCk7CiAgICAgICAgZm9yKGF1dG8gJml0OiBjdXIpewogICAgICAgICAgICB1aW50NjRfdCBrZXk9aXQuZmlyc3Q7CiAgICAgICAgICAgIHVpbnQzMl90IHZhbD1pdC5zZWNvbmQ7CiAgICAgICAgICAgIGludCB4ID0gKGludCkoa2V5Pj4yOCk7CiAgICAgICAgICAgIGludCB5ID0gKGludCkoKGtleT4+MTQpJigoMTw8MTQpLTEpKTsKICAgICAgICAgICAgaW50IHogPSAoaW50KShrZXkgJiAoKDE8PDE0KS0xKSk7CiAgICAgICAgICAgIGludCBleF9tYXggPSB1cHBlcl9ib3VuZChwd3MuYmVnaW4oKSwgcHdzLmVuZCgpLCB4KSAtIHB3cy5iZWdpbigpIC0gMTsKICAgICAgICAgICAgaW50IGV5X21heCA9IHVwcGVyX2JvdW5kKHB3cy5iZWdpbigpLCBwd3MuZW5kKCksIHkpIC0gcHdzLmJlZ2luKCkgLSAxOwogICAgICAgICAgICBpbnQgZXpfbWF4ID0gdXBwZXJfYm91bmQocHdzLmJlZ2luKCksIHB3cy5lbmQoKSwgeikgLSBwd3MuYmVnaW4oKSAtIDE7CiAgICAgICAgICAgIGZvcihpbnQgZXg9MDsgZXg8PWV4X21heDsgKytleCl7CiAgICAgICAgICAgICAgICBpbnQgbnggPSB4IC8gcHdzW2V4XTsKICAgICAgICAgICAgICAgIGZvcihpbnQgZXk9MDsgZXk8PWV5X21heDsgKytleSl7CiAgICAgICAgICAgICAgICAgICAgaW50IG55ID0geSAvIHB3c1tleV07CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCBlej0wOyBlejw9ZXpfbWF4OyArK2V6KXsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG56ID0geiAvIHB3c1tlel07CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGsyID0gcGFjayhueCxueSxueik7CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZCA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCl2YWwgKiAodWludDMyX3QpKGV4K2V5K2V6KzEpKSAmIE1BU0spOwogICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0MiA9IG54dC5maW5kKGsyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXQyPT1ueHQuZW5kKCkpIG54dC5lbXBsYWNlKGsyLCBhZGQpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgaXQyLT5zZWNvbmQgKz0gYWRkOyBpdDItPnNlY29uZCAmPSBNQVNLOyB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN1ci5zd2FwKG54dCk7CiAgICB9CiAgICB1aW50MzJfdCBhbnMgPSAwOwogICAgZm9yKGF1dG8gJml0OiBjdXIpeyBhbnMgKz0gaXQuc2Vjb25kOyBhbnMgJj0gTUFTSzsgfQogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==