#include <bits/stdc++.h>
using namespace std;
vector<int> sieve(int n) {
vector<bool> is_prime(n + 1, true);
vector<int> primes;
is_prime[0] = is_prime[1] = false;
for (int p = 2; p <= n; ++p) {
if (is_prime[p]) {
primes.push_back(p);
for (int i = p * p; i <= n; i += p)
is_prime[i] = false;
}
}
return primes;
}
vector<int> factorize(int n, const vector<int>& primes) {
vector<int> factors;
if (n == 0) return factors;
for (int p : primes) {
if (p * p > n) break;
if (n % p == 0) {
factors.push_back(p);
while (n % p == 0)
n /= p;
}
}
if (n > 1) factors.push_back(n);
return factors;
}
struct Divisor {
int d;
int k;
};
void generate_divisors(const vector<int>& factors, int index, int current_d, int current_k, vector<Divisor>& divisors) {
if (index == factors.size()) {
divisors.push_back({current_d, current_k});
return;
}
generate_divisors(factors, index + 1, current_d, current_k, divisors);
generate_divisors(factors, index + 1, current_d * factors[index], current_k + 1, divisors);
}
vector<Divisor> get_divisors_with_k(const vector<int>& factors) {
vector<Divisor> divisors;
generate_divisors(factors, 0, 1, 0, divisors);
return divisors;
}
int main() {
int A, B, L;
cin >> A >> B >> L;
int m = A + B;
vector<int> primes = sieve(4000);
long long sum_a = 0;
if (L >= 1) {
sum_a += 1;
}
for (int z = 1; z <= m; ++z) {
vector<int> factors = factorize(z, primes);
vector<Divisor> divisors = get_divisors_with_k(factors);
for (const Divisor& dv : divisors) {
int mu = (dv.k % 2 == 0) ? 1 : -1;
sum_a += mu * (L / dv.d);
}
}
long long sum_c = 0;
if (L >= 1) {
sum_c += 2;
}
for (int z = 1; z <= m - 1; ++z) {
int g = z * (m - z);
if (g == 0) continue;
vector<int> factors = factorize(g, primes);
sort(factors.begin(), factors.end());
factors.erase(unique(factors.begin(), factors.end()), factors.end());
vector<Divisor> divisors = get_divisors_with_k(factors);
for (const Divisor& dv : divisors) {
int mu = (dv.k % 2 == 0) ? 1 : -1;
sum_c += mu * (L / dv.d);
}
}
long long total_vaults = (long long)L * (A + B + 1);
long long insecure = total_vaults - 2 * sum_a + sum_c;
long long secure = 2 * (sum_a - sum_c);
long long super_secure = sum_c;
cout << insecure << "\n" << secure << "\n" << super_secure << endl;
return 0;
}