#include <bits/stdc++.h>
using namespace std;
struct edge {
  int v;
  long long w;
};
long long MOD = 1000000007;
long long _MOD = 1000000009;
double EPS = 1e-10;
long long inv[1000001], f[1000001], fi[1000001];
long long C(int N, int K) { return f[N] * fi[K] % MOD * fi[N - K] % MOD; }
long long H(int N, int K) {
  if (K == 0) return !N;
  return H(N + K - 1, K - 1);
}
int main() {
  inv[1] = 1;
  for (int i = 2; i <= 1000000; i++) inv[i] = -MOD / i * inv[MOD % i] % MOD;
  f[0] = fi[0] = 1;
  for (int i = 1; i <= 1000000; i++) {
    f[i] = f[i - 1] * i % MOD;
    fi[i] = fi[i - 1] * inv[i] % MOD;
  }
  vector<long long> p3(1000001);
  p3[0] = 1;
  for (int i = 1; i <= 1000000; i++) p3[i] = p3[i - 1] * 3 % MOD;
  int N, M, L;
  cin >> N >> M >> L;
  if (N <= 1000 && M <= 1000 && L <= 1000)
    ;
  else
    return 0;
  N++;
  if (N == 1) {
    cout << p3[N + M + L] << endl;
    return 0;
  }
  long long ans = 0;
  for (int m = 0; m <= M; m++)
    for (int l = 0; l <= L; l++)
      ans = (ans + f[N + m + l - 2] * fi[N - 2] % MOD * fi[m] % MOD * fi[l] %
                       MOD * p3[M - m + L - l]) %
            MOD;
  cout << (ans + MOD) % MOD << endl;
}
