#include using namespace std; const int MD = 1e9 + 7; const int MX = 3000005; long long f[MX], g[MX], p[MX]; long long pw(long long x, long long y) { long long r = 1; while (y) { if (y & 1) r = r * x % MD; x = x * x % MD; y >>= 1; } return r; } long long C(int n, int m) { if (m < 0 || m > n) return 0; return f[n] * g[m] % MD * g[n - m] % MD; } int main() { ios::sync_with_stdio(0); cin.tie(0); int a, b, c; cin >> a >> b >> c; int n = a + b + c; f[0] = 1; p[0] = 1; for (int i = 1; i <= n; ++i) { f[i] = f[i - 1] * i % MD; p[i] = p[i - 1] * 2 % MD; } g[n] = pw(f[n], MD - 2); for (int i = n - 1; i >= 0; --i) { g[i] = g[i + 1] * (i + 1) % MD; } long long ans = 0; long long cf = C(b + c - 2, b - 1); for (int k = 0; k < a; ++k) { int i = b + c - 1 + k; long long tm = C(b + c - 2 + k, b + c - 2); long long vl = (p[i] - 1 + MD) % MD; ans = (ans + tm * vl) % MD; } ans = ans * cf % MD; cout << ans << endl; return 0; }