#include <bits/stdc++.h>
const int maxn(1e6 + 10), Mod(1e9 + 7);
int N, M, K, ans, fac[maxn], inv[maxn], Pow[maxn];
int C(int n, int m) { return 1ll * fac[n] * inv[m] % Mod * inv[n - m] % Mod; }
int Minus(int x, int y) { return (x - y + Mod) % Mod; }
int Add(int x, int y) { return (x + y) % Mod; }
int Mul(int x, int y) { return 1ll * x * y % Mod; }
int fastpow(int x, int y) {
  int ans = 1;
  for (; y; y >>= 1, x = 1ll * x * x % Mod)
    if (y & 1) ans = 1ll * ans * x % Mod;
  return ans;
}
int main() {
  scanf("%d%d%d", &N, &M, &K), fac[0] = inv[0] = Pow[0] = 1;
  for (int i = 1; i <= N + M + K; i++) fac[i] = 1ll * fac[i - 1] * i % Mod;
  for (int i = 1; i <= N + M + K; i++) Pow[i] = 1ll * Pow[i - 1] * 3 % Mod;
  inv[N + M + K] = fastpow(fac[N + M + K], Mod - 2);
  for (int i = N + M + K - 1; i; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % Mod;
  for (int i = 0, x = 1; i <= M + K; i++) {
    ans = Add(ans, Mul(Mul(C(N + i - 1, N - 1), Pow[M + K - i]), x));
    if (i < K)
      x = (x + x) % Mod;
    else if (i < M)
      x = Minus((x + x) % Mod, C(i, K));
    else
      x = Minus(Minus((x + x) % Mod, C(i, K)), C(i, M));
  }
  printf("%d\n", ans);
  return 0;
}
