#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long inv[1000000 + 1];
long long kai[1000000 + 1];
long long invkai[1000000 + 1];
void invinit() {
  inv[1] = 1;
  for (int i = 2; i <= 1000000; i++) {
    inv[i] = mod - (mod / i) * inv[mod % i] % mod;
  }
  kai[0] = invkai[0] = 1;
  for (int i = 1; i <= 1000000; i++) {
    kai[i] = kai[i - 1] * i % mod;
    invkai[i] = invkai[i - 1] * inv[i] % mod;
  }
}
long long com(long long a, long long b) {
  if (b < 0 || a < b) return 0;
  return (invkai[b] * invkai[a - b]) % mod * kai[a] % mod;
}
long long p2[1000001];
int main() {
  invinit();
  long long n, m, k;
  scanf("%lld%lld%lld", &n, &m, &k);
  p2[0] = 1;
  for (int i = 1; i <= 1000000; i++) p2[i] = p2[i - 1] * 2 % mod;
  long long nm = 0, nk = 0;
  for (int i = n; i <= n + m; i++) nm = (nm + com(n + m, i)) % mod;
  for (int i = n; i <= n + k; i++) nk = (nk + com(n + k, i)) % mod;
  long long ans = 0;
  for (int s = 0; s <= k; s++) {
    ans += p2[k - s] * nm % mod * com(n + m + k, s) % mod;
    ans %= mod;
  }
  for (int s = 0; s <= m; s++) {
    ans += p2[m - s] * nm % mod * com(n + m + k, s) % mod;
    ans %= mod;
  }
  long long now = 0;
  for (int t = 0; t <= k; t++) {
    now += com(n + m + k - m, t);
    now %= mod;
  }
  for (int s = m; s >= 0; s--) {
    ans += mod - (now * com(n + m + k, s) % mod);
    ans %= mod;
    now = (now * 2 + mod - com(n + m + k - s, k));
    now %= mod;
  }
  printf("%lld\n", ans);
}
