#include <bits/stdc++.h>
using namespace std;
const long long p = 1e9 + 7;
long long n, m, k, ans;
long long fac[1000010], inv[1000010], san[1000010];
long long fpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % p;
    a = a * a % p;
    b >>= 1;
  }
  return ans;
}
long long C(long long n, long long m) {
  if (n < m || n < 0 || m < 0) return 0;
  return fac[n] * inv[m] % p * inv[n - m] % p;
}
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  long long t = n + m + k;
  fac[0] = inv[0] = san[0] = 1;
  for (int i = 1; i <= t; i++) {
    fac[i] = fac[i - 1] * i % p;
    san[i] = san[i - 1] * 3 % p;
  }
  inv[t] = fpow(fac[t], p - 2);
  for (int i = t - 1; i; i--) inv[i] = inv[i + 1] * (i + 1) % p;
  long long t1 = 0, t2 = 1;
  for (int i = 0; i <= m + k; i++) {
    t = C(n + i - 1, n - 1) * san[m + k - i] % p;
    t = t * (t2 - t1 + p) % p;
    t2 = (t2 * 2 % p - C(i, m) + p) % p;
    t1 = (t1 * 2 % p - C(i, i - k - 1) + p) % p + C(i + 1, i - k);
    ans = (ans + t) % p;
  }
  printf("%lld", ans);
  return 0;
}
