#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7, N, M, K, dp[1009][1009], put3[3009], inv[3009], fac[3009];
int add(int x, int y) {
  int ans = x + y;
  if (ans >= mod) ans -= mod;
  return ans;
}
int substract(int x, int y) {
  if (x >= y) return x - y;
  return x - y + mod;
}
int mul(int x, int y) { return 1LL * x * y % mod; }
int pow(int a, int b) {
  int p = 1;
  for (int i = 0; (1 << i) <= b; i++) {
    if (b & (1 << i)) p = mul(p, a);
    a = mul(a, a);
  }
  return p;
}
void Prec(int lim) {
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= lim; i++) fac[i] = mul(fac[i - 1], i);
  inv[lim] = pow(fac[lim], mod - 2);
  for (int i = lim - 1; i >= 1; i--) inv[i] = mul(inv[i + 1], i + 1);
}
int comb(int N, int K) {
  int ans = mul(fac[N], inv[N - K]);
  ans = mul(ans, inv[K]);
  return ans;
}
int main() {
  scanf("%d %d %d", &N, &M, &K);
  put3[0] = 1;
  for (int i = 1; i <= N + M + K; i++)
    put3[i] = add(add(put3[i - 1], put3[i - 1]), put3[i - 1]);
  Prec(3000);
  int ans = 0;
  for (int i = 0; i <= M; i++)
    for (int j = 0; j <= K; j++) {
      dp[i][j] = put3[i + j];
      if (i > 0) dp[i][j] = add(dp[i][j], dp[i - 1][j]);
      if (j > 0) dp[i][j] = add(dp[i][j], dp[i][j - 1]);
      if (N > 1) {
        int a = N - 2, b = M - i, c = K - j, curr = dp[i][j];
        curr = mul(curr, comb(a + b + c, a));
        curr = mul(curr, comb(b + c, b));
        ans = add(ans, curr);
      }
    }
  if (N > 1)
    printf("%d\n", ans);
  else
    printf("%d\n", dp[M][K]);
  return 0;
}
