#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
void add(long long &a, long long b) { a = (a + b + mod) % mod; }
long long mul(long long a, long long b) { return (a * b) % mod; }
long long mpow(long long a, long long b) {
  if (b == 0) return 1;
  long long res = mpow(mul(a, a), b / 2);
  if (b & 1) res = mul(res, a);
  return res;
}
long long fact[100000];
long long divi(long long a, long long b) { return mul(a, mpow(b, mod - 2)); }
long long dp[1005][2005][2];
int N, M, K;
long long calc(long long a, long long b) {
  return divi(fact[a + b - 1], mul(fact[a], fact[b - 1]));
}
long long rec(int n, int m, int f) {
  if (dp[n][m][f] != -1) return dp[n][m][f];
  long long res = 0;
  if (f == 0) {
    if (n == 0) {
      long long cnt = 0;
      for (int i = 0; i <= K; i++) {
        add(cnt, mul(mpow(3, m + K - i), calc(i, N + M - m)));
      }
      return dp[n][m][f] = cnt;
    }
    add(res, rec(n - 1, m, 1));
    add(res, rec(n - 1, m, 0));
  } else {
    if (m == 0) return 0;
    add(res, rec(n, m - 1, 1));
    add(res, rec(n, m - 1, 0));
  }
  return dp[n][m][f] = res;
}
int main() {
  fact[0] = 1;
  for (long long i = 1; i < 100000; i++) fact[i] = mul(fact[i - 1], i);
  memset(dp, -1, sizeof(dp));
  cin >> N >> M >> K;
  if (N > 1000 || M > 1000 || K > 1000) return 0;
  cout << rec(N, M, 0) << endl;
  return 0;
}
