#include <bits/stdc++.h>
using namespace std;
const int INF = 1001001001;
const long long INFLL = 1001001001001001001LL;
template <typename T>
void pv(T a, T b) {
  for (T i = a; i != b; ++i) cout << *i << " ";
  cout << endl;
}
template <typename T>
void chmin(T& a, T b) {
  if (a > b) a = b;
}
template <typename T>
void chmax(T& a, T b) {
  if (a < b) a = b;
}
int in() {
  int x;
  scanf("%d", &x);
  return x;
}
double fin() {
  double x;
  scanf("%lf", &x);
  return x;
}
long long lin() {
  long long x;
  scanf("%lld", &x);
  return x;
}
const long long MO = 1000000007;
const int MA = 1 << 20;
long long fact[MA], inv[MA], ifac[MA], p3[MA], i3[MA];
int main() {
  inv[1] = 1;
  for (int i = 2; i < MA; ++i) {
    inv[i] = MO - MO / i * inv[MO % i] % MO;
  }
  fact[0] = 1;
  ifac[0] = 1;
  p3[0] = 1;
  i3[0] = 1;
  for (int i = 1; i < MA; ++i) {
    fact[i] = fact[i - 1] * i % MO;
    ifac[i] = ifac[i - 1] * inv[i] % MO;
    p3[i] = p3[i - 1] * 3 % MO;
    i3[i] = i3[i - 1] * inv[3] % MO;
  }
  int N = in();
  int M = in();
  int K = in();
  if (N + M + K <= 3000) {
    long long res = 0;
    for (int b = 0; b <= M; ++b) {
      for (int c = 0; c <= K; ++c) {
        res += fact[N - 1 + b + c] * ifac[b] % MO * ifac[c] % MO * ifac[N - 1] %
               MO * p3[M + K - b - c] % MO;
        res %= MO;
      }
    }
    printf("%lld\n", res);
  }
  return 0;
}
