#include <bits/stdc++.h>
using namespace std;
class Timer {
 private:
  string scope_name;
  chrono::high_resolution_clock::time_point start_time;

 public:
  Timer(string name) : scope_name(name) {
    start_time = chrono::high_resolution_clock::now();
  }
  ~Timer() {
    auto stop_time = chrono::high_resolution_clock::now();
    auto length =
        chrono::duration_cast<chrono::microseconds>(stop_time - start_time)
            .count();
    double mlength = double(length) * 0.001;
    ;
  }
};
const long long MOD = 1000000007;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int iNF = 0x3f3f3f3f;
const long long MAXN = 300005;
long long n, m, k;
long long fact[MAXN], inv[MAXN];
long long mpow(long long bs, long long ep) {
  long long ret = 1;
  while (ep) {
    if (ep & 1) {
      ret = ret * bs % MOD;
    }
    ep >>= 1;
    bs = bs * bs % MOD;
  }
  return ret;
}
long long cob(long long a, long long b) {
  return fact[a] * inv[b] % MOD * inv[a - b] % MOD;
}
int main() {
  ;
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  cin >> n >> m >> k;
  inv[0] = fact[0] = 1;
  for (int i = 1; i < MAXN - 1 + 1; i += 1) {
    fact[i] = fact[i - 1] * i % MOD;
    inv[i] = mpow(fact[i], MOD - 2);
  }
  long long ans = 0;
  for (int i = 0; i < m + 1; i += 1) {
    for (int j = 0; j < k + 1; j += 1) {
      long long cb = cob(n + i + j - 1, i) * cob(n + j - 1, j) % MOD;
      ans += cb * mpow(3, m - i) % MOD * mpow(3, k - j) % MOD;
      ans %= MOD;
    }
  }
  cout << ans << '\n';
  return 0;
}
