#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <int MOD>
struct ModInt {
  using Mint = ModInt;
  int val;
  ModInt(ll __val = 0) { fix(__val % MOD + MOD); }
  Mint& fix(int __val) {
    val = __val;
    if (val >= MOD) val -= MOD;
    return *this;
  }
  explicit operator int() { return val; }
  Mint operator+(const Mint& mt) const { return Mint().fix(val + mt.val); }
  Mint operator-(const Mint& mt) const {
    return Mint().fix(val - mt.val + MOD);
  }
  Mint operator*(const Mint& mt) const {
    return Mint().fix(ll(val) * mt.val % MOD + MOD);
  }
  Mint& operator+=(const Mint& mt) { return *this = *this + mt; }
  Mint& operator-=(const Mint& mt) { return *this = *this - mt; }
  Mint& operator*=(const Mint& mt) { return *this = *this * mt; }
  Mint pow(int y) const {
    Mint x = *this;
    Mint ans(1);
    for (; y > 0; y >>= 1, x *= x) {
      if (y & 1) ans *= x;
    }
    return ans;
  }
  Mint operator-() const { return Mint().fix(MOD - val); }
  Mint inv() const { return pow(MOD - 2); }
  Mint operator/(const Mint& mt) const { return *this * mt.inv(); }
  Mint& operator/=(const Mint& mt) const { return *this / mt; }
  friend ostream& operator<<(ostream& os, const Mint& mt) {
    return os << mt.val;
  }
};
using Mint = ModInt<1000000007>;
const int MAXN = 3030;
Mint C[MAXN][MAXN];
Mint pow3[MAXN];
void precalc() {
  for (int i = 0; i < MAXN; ++i) {
    C[i][0] = 1;
    for (int j = 1; j <= i; ++j) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  pow3[0] = 1;
  for (int i = 1; i < MAXN; ++i) pow3[i] = pow3[i - 1] * 3;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  precalc();
  int N, M, K;
  cin >> N >> M >> K;
  assert(N <= 1000 && M <= 1000 && K <= 1000);
  Mint ans = 0;
  for (int x = 0; x <= M; ++x) {
    for (int y = 0; y <= K; ++y) {
      ans += C[x + y + N - 1][x + y] * C[x + y][y] * pow3[M - x + K - y];
    }
  }
  cout << ans << "\n";
  return 0;
}
