#include <bits/stdc++.h>
using namespace std;
static const int INF = 0x3f3f3f3f;
static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
static const int MOD = 1000000007;
static const double PI = 3.141592653589793238462643383279;
template <typename T>
void pv(T a, T b) {
  for (T i = a; i != b; i++) cout << *i << " ";
  cout << endl;
}
template <typename T, typename U>
inline void amin(T& x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T& x, U y) {
  if (x < y) x = y;
}
long long lin() {
  long long _x;
  scanf("%lld", &_x);
  return _x;
};
long long extgcd(long long a, long long b, long long& x, long long& y) {
  long long d = a;
  if (b != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1;
    y = 0;
  }
  return d;
}
long long inv(long long a) {
  long long x, y;
  extgcd(a, MOD, x, y);
  return (x % MOD + MOD) % MOD;
}
long long nCr(long long n, long long r) {
  if (n < r) return 0;
  if (n - r < r) r = n - r;
  long long ret = 1;
  for (long long(i) = 0; (i) < (long long)(r); (i)++) {
    ret *= n;
    --n;
    ret %= MOD;
    ret *= inv(i + 1);
    ret %= MOD;
  }
  return ret;
}
long long mod_pow(long long x, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) res = res * x % MOD;
    x = x * x % MOD;
    n >>= 1;
  }
  return res;
}
signed main() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long ans = 0;
  if (!n)
    ans += mod_pow(3, m + k);
  else {
    for (long long i = n; i <= n + m + k; i++) {
      long long x = nCr(i - 1, n - 1);
      long long y = 0;
      for (long long j = max(0LL, i - n - k); j <= min(i - n, m); j++) {
        y += nCr(i - n, j);
        y %= MOD;
      }
      long long z = mod_pow(3, n + m + k - i);
      cout << "z"
           << " = " << z << endl;
      ;
      cout << "y"
           << " = " << y << endl;
      ;
      cout << "x"
           << " = " << x << endl;
      ;
      ans += x * y % MOD * z;
      ans %= MOD;
    }
  }
  ans %= MOD;
  cout << ans << endl;
  return 0;
}
