#include <bits/stdc++.h>
using namespace std;
int fac[2000005], inv[2000005], t[2000005], a, b, c, mx, ans;
int q_pow(int x, int n) {
  int ret = 1;
  for (; n; n >>= 1, x = (long long)x * x % 1000000007)
    if (n & 1) ret = (long long)ret * x % 1000000007;
  return ret;
}
int C(int n, int m) {
  return (long long)fac[n] * inv[m] % 1000000007 * inv[n - m] % 1000000007;
}
int main() {
  mx = 2000000;
  t[0] = fac[0] = 1;
  for (int i = 1; i <= mx; i++)
    fac[i] = (long long)i * fac[i - 1] % 1000000007,
    t[i] = (long long)t[i - 1] * 3 % 1000000007;
  inv[mx] = q_pow(fac[mx], 1000000007 - 2);
  for (int i = mx; i; i--) inv[i - 1] = (long long)inv[i] * i % 1000000007;
  scanf("%d%d%d", &a, &b, &c);
  ans = 0;
  int rb = 0, rc = 0;
  for (int i = 0; i <= b + c; i++) {
    int tmp = (long long)t[b + c - i] * fac[a + i - 1] % 1000000007,
        w = q_pow(2, i);
    if (i > b) {
      rb = (rb * 2) % 1000000007;
      rb = (rb + C(i - 1, b)) % 1000000007;
      w = (w - rb) % 1000000007;
    }
    if (i > c) {
      rc = (rc * 2) % 1000000007;
      rc = (rc + C(i - 1, c)) % 1000000007;
      w = (w - rc) % 1000000007;
    }
    w = ((long long)w * inv[i]) % 1000000007;
    ans = (ans + (long long)w * tmp) % 1000000007;
  }
  printf("%d\n", ans);
}
