#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
const int maxn = 3e7;
const int MOD = 1e9 + 7;
struct Item
{
int a, b, c;
Item(int a = 0, int b = 0, int c = 0) :
a(a), b(b), c(c) {};
};
int n, m, k;
ll fact[maxn + 10], dp[4];
ll binpow(ll a, ll b)
{
a %= MOD;
ll ans = 1;
for (; b; b >>= 1, (a *= a) %= MOD)
if (b & 1)
(ans *= a) %= MOD;
return ans;
}
ll C(int n, int k)
{
return fact[n] * binpow(fact[k] * fact[n - k], MOD - 2) % MOD;
}
ll num_path(int x_a, int y_a, int z_a, int x_b, int y_b, int z_b)
{
int dist_x = x_b - x_a;
int dist_y = y_b - y_a;
int dist_z = z_b - z_a;
return C(dist_x + dist_y + dist_z, dist_x) * C(dist_y + dist_z, dist_y) % MOD;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("BEE.INP", "r"))
{
freopen("BEE.INP", "r", stdin);
freopen("BEE.OUT", "w", stdout);
}
cin >> n >> m >> k;
fact[0] = 1;
for (int i = 1; i <= maxn; i++)
fact[i] = i * fact[i - 1] % MOD;
vector<Item> it;
it.push_back(Item(n/3, m/3, k/3));
it.push_back(Item(2 * n/3, 2 * m/3, 2 * k/3));
it.push_back(Item(n, m, k));
for (int i = 0; i <= 2; i++)
{
dp[i] = num_path(0, 0, 0, it[i].a, it[i].b, it[i].c);
for (int j = 0; j < i; j++)
(dp[i] -= num_path(it[j].a, it[j].b, it[j].c, it[i].a, it[i].b, it[i].c) * dp[j] % MOD) %= MOD;
}
cout << (num_path(0, 0, 0, n, m, k) - dp[2] + MOD) % MOD;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gM2U3Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKCnN0cnVjdCBJdGVtCnsKICAgIGludCBhLCBiLCBjOwoKICAgIEl0ZW0oaW50IGEgPSAwLCBpbnQgYiA9IDAsIGludCBjID0gMCkgOgogICAgICAgIGEoYSksIGIoYiksIGMoYykge307Cn07CgppbnQgbiwgbSwgazsKbGwgZmFjdFttYXhuICsgMTBdLCBkcFs0XTsKCmxsIGJpbnBvdyhsbCBhLCBsbCBiKQp7CiAgICBhICU9IE1PRDsKICAgIGxsIGFucyA9IDE7CiAgICBmb3IgKDsgYjsgYiA+Pj0gMSwgKGEgKj0gYSkgJT0gTU9EKQogICAgICAgIGlmIChiICYgMSkKICAgICAgICAgICAgKGFucyAqPSBhKSAlPSBNT0Q7CiAgICByZXR1cm4gYW5zOwp9CmxsIEMoaW50IG4sIGludCBrKQp7CiAgICByZXR1cm4gZmFjdFtuXSAqIGJpbnBvdyhmYWN0W2tdICogZmFjdFtuIC0ga10sIE1PRCAtIDIpICUgTU9EOwp9CmxsIG51bV9wYXRoKGludCB4X2EsIGludCB5X2EsIGludCB6X2EsIGludCB4X2IsIGludCB5X2IsIGludCB6X2IpCnsKICAgIGludCBkaXN0X3ggPSB4X2IgLSB4X2E7CiAgICBpbnQgZGlzdF95ID0geV9iIC0geV9hOwogICAgaW50IGRpc3RfeiA9IHpfYiAtIHpfYTsKICAgIHJldHVybiBDKGRpc3RfeCArIGRpc3RfeSArIGRpc3RfeiwgZGlzdF94KSAqIEMoZGlzdF95ICsgZGlzdF96LCBkaXN0X3kpICUgTU9EOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJCRUUuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJCRUUuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiQkVFLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBtID4+IGs7CiAgICBmYWN0WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1heG47IGkrKykKICAgICAgICBmYWN0W2ldID0gaSAqIGZhY3RbaSAtIDFdICUgTU9EOwogICAgdmVjdG9yPEl0ZW0+IGl0OwogICAgaXQucHVzaF9iYWNrKEl0ZW0obi8zLCBtLzMsIGsvMykpOwogICAgaXQucHVzaF9iYWNrKEl0ZW0oMiAqIG4vMywgMiAqIG0vMywgMiAqIGsvMykpOwogICAgaXQucHVzaF9iYWNrKEl0ZW0obiwgbSwgaykpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gMjsgaSsrKQogICAgewogICAgICAgIGRwW2ldID0gbnVtX3BhdGgoMCwgMCwgMCwgaXRbaV0uYSwgaXRbaV0uYiwgaXRbaV0uYyk7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspCiAgICAgICAgICAgIChkcFtpXSAtPSBudW1fcGF0aChpdFtqXS5hLCBpdFtqXS5iLCBpdFtqXS5jLCBpdFtpXS5hLCBpdFtpXS5iLCBpdFtpXS5jKSAqIGRwW2pdICUgTU9EKSAlPSBNT0Q7CiAgICB9CgogICAgY291dCA8PCAobnVtX3BhdGgoMCwgMCwgMCwgbiwgbSwgaykgLSBkcFsyXSArIE1PRCkgJSBNT0Q7Cn0K