#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-10;
const int INF = 2147483647;
const long long mod = 1e9 + 7;
int N, M, K;
long long c[600010];
long long t[600010];
long long p[900010];
long long r[600010];
long long ans;
long long conv(int a, int b) { return (p[a] * r[b] % mod) * r[a - b] % mod; }
int main() {
  scanf("%d%d%d", &N, &M, &K);
  p[0] = p[1] = 1;
  for (int i = 2; i < N + M + K; ++i) {
    p[i] = (p[i - 1] * i) % mod;
  }
  int s = ((K + M) > (N) ? (K + M) : (N));
  long long x = p[s];
  r[s] = 1;
  for (int i = (int)mod - 2; i > 0; i /= 2, x = (x * x) % mod) {
    if (i % 2 == 1) r[s] = (r[s] * x) % mod;
  }
  for (int i = s - 1; i >= 0; --i) {
    r[i] = r[i + 1] * (i + 1) % mod;
  }
  c[0] = t[0] = 1;
  for (int i = 1; i <= M + K; ++i) {
    t[i] = (t[i - 1] * 3) % mod;
  }
  if (K < M) {
    K ^= M;
    M ^= K;
    K ^= M;
  }
  s = K + M;
  for (int i = 1; i <= M; ++i) {
    c[i] = c[i - 1] * 2 % mod;
  }
  c[s] = conv(s, K);
  for (int i = s - 1; i > M; --i) {
    c[i] = (c[i + 1] + conv(i, K) + conv(i, M)) * r[2] % mod;
  }
  for (int i = s; i >= 0; --i) {
    x = p[i + N - 1] * t[s - i] % mod;
    x = x * r[N - 1] % mod;
    x = x * c[i] % mod;
    x = x * r[i] % mod;
    ans += x;
    ans %= mod;
  }
  printf("%lld\n", ans);
  return 0;
}
