#include <bits/stdc++.h>
const int INF = 1e8;
using namespace std;
template <typename T>
void dpite(T a, T b) {
  return;
}
template <typename T>
void pite(T a, T b) {
  for (T ite = a; ite != b; ite++) cout << (ite == a ? "" : " ") << *ite;
  cout << '\n';
}
template <typename T>
bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
void ios_init() {
  ios::sync_with_stdio(false);
  cin.tie(0);
}
const long long int mod = 1e9 + 7;
pair<long long, long long> extgcd(long long a, long long b) {
  if (b == 1) {
    return pair<long long, long long>(0, 1);
  }
  pair<long long, long long> t = extgcd(b, a % b);
  return pair<long long, long long>(t.second, t.first - a / b * t.second);
}
long long inverse(long long a, long long modl = mod) {
  return (extgcd(modl, a).second + modl) % modl;
}
long long Cinv(long long x, long long y, const long long modl = mod) {
  long long n = 1, r = 1;
  for (int i = 0; i < y; i++) {
    n = n * (i + 1) % modl;
    r = r * (x - i) % modl;
  }
  return r * inverse(n, modl) % modl;
}
long long modpow(long long a, long long b, long long modd = mod) {
  a %= modd;
  if (a == 0) return 0;
  long long res = 1;
  while (b != 0) {
    if (b & 1) res = res * a % modd;
    a = a * a % modd;
    b >>= 1;
  }
  return res;
}
int main() {
  ios_init();
  int n, m, k;
  while (cin >> n >> m >> k) {
    long long int ans = 0;
    for (int i = (0); i < (m + 1); ++i) {
      long long int c1 = Cinv(n - 1 + i, i);
      long long int c2 = Cinv(n - 1, 0);
      for (int j = (0); j < (k + 1); ++j) {
        int l = n - 1 + i + j;
        ans = (ans + c1 * c2 % mod * modpow(3, m + k - (i + j)) % mod) % mod;
        c1 = c1 * (l + 1) % mod * inverse(l - i + 1) % mod;
        c2 = c2 * (l - i + 1) % mod * inverse(j + 1) % mod;
        true;
      }
    }
    cout << ans << '\n';
  }
  return 0;
}
