#include <bits/stdc++.h>
using namespace std;
const int maxx = 1e5 + 1314;
const int M = 1e9 + 7;
long long qsm(long long x, int k = M - 2) {
  long long ans = 1;
  while (k) {
    if (k & 1) ans = ans * x % M;
    x = x * x % M;
    k >>= 1;
  }
  return ans % M;
}
long long times[maxx];
long long inv[maxx];
long long tb[maxx];
void pre() {
  int mx = maxx - 20;
  times[0] = 1;
  tb[0] = 1;
  for (int i = 1; i <= mx; i++)
    times[i] = times[i - 1] * i % M, tb[i] = tb[i - 1] * 3 % M;
  inv[mx] = qsm(times[mx]);
  for (int i = mx - 1; i; i--) inv[i] = inv[i + 1] * (i + 1) % M;
  inv[0] = 1;
}
long long C(int a, int b) {
  if (b == -1) return 1;
  return times[a] * inv[b] % M * inv[a - b] % M;
}
long long n, m, k;
int read() {
  int k;
  cin >> k;
  return k;
}
long long dp(long long N) {
  long long ans = 0;
  for (int i = 0; i <= N; i++) {
    if (i <= m && (N - i) <= k) {
      ans += C(N, i);
    }
    ans %= M;
  }
  return ans;
}
int main() {
  pre();
  n = read();
  m = read();
  k = read();
  long long N = n + m + k;
  long long ans = 0;
  for (int i = n; i <= N; i++) {
    ans += tb[N - i] * C(i - 1, i - n) % M * dp(i - n) % M;
    ans %= M;
  }
  cout << ans << endl;
  while (cin >> n >> m) cout << C(n, m) << endl;
  return 0;
}
