#include <bits/stdc++.h>
using namespace std;
const int maxn = 300010, rhl = 1000000007;
int N, M, K;
long long jie[maxn], inv[maxn], mi[maxn];
inline long long qsm(long long a, int b) {
  long long ret = 1;
  for (; b; b >>= 1, (a *= a) %= rhl)
    if (b & 1) (ret *= a) %= rhl;
  return ret;
}
inline int gi() {
  char ch;
  int ret = 0, f = 1;
  do ch = getchar();
  while (!(ch >= '0' && ch <= '9') && ch != '-');
  if (ch == '-') f = -1, ch = getchar();
  do ret = ret * 10 + ch - '0', ch = getchar();
  while (ch >= '0' && ch <= '9');
  return ret * f;
}
inline long long C(int n, int m) {
  if (n < m || m < 0) return 0;
  return jie[n] * inv[m] % rhl * inv[n - m] % rhl;
}
int main() {
  N = gi();
  M = gi();
  K = gi();
  jie[0] = mi[0] = 1;
  for (int i = 1; i <= N + M + K; ++i) {
    mi[i] = mi[i - 1] * 3LL;
    while (mi[i] >= rhl) mi[i] -= rhl;
    jie[i] = jie[i - 1] * (long long)i;
    if (jie[i] >= rhl) jie[i] %= rhl;
  }
  inv[N + M + K] = qsm(jie[N + M + K], rhl - 2);
  for (int i = N + M + K; i; --i) {
    inv[i - 1] = inv[i] * (long long)i;
    if (inv[i - 1] >= rhl) inv[i - 1] %= rhl;
  }
  long long sum = 1, ans = 0;
  for (int i = 0; i <= M + K; ++i) {
    long long tm = C(N + i - 1, i) * mi[M + K - i] % rhl;
    ans += tm * sum % rhl;
    if (ans >= rhl) ans %= rhl;
    sum <<= 1;
    if (sum >= rhl) sum -= rhl;
    sum -= C(i, i - K) + C(i, M);
    while (sum < 0) sum += rhl;
  }
  cout << ans << endl;
  return 0;
}
