#include <bits/stdc++.h>
const int mod = 1e9 + 7, neko = 300010;
int ans, now, res, n, m, k;
typedef int arr[neko * 3];
arr fac, ifac;
int spow(int m, int n) {
  int b = 1;
  for (; n; n >>= 1, m = 1ll * m * m % mod)
    if (n & 1) b = 1ll * b * m % mod;
  return b;
}
int C(int n, int m) { return 1ll * fac[n] * ifac[m] % mod * ifac[n - m] % mod; }
void initM(int n) {
  fac[0] = ifac[0] = 1;
  for (register int i = (1), iend = (n); i <= iend; i = -(~i))
    fac[i] = 1ll * fac[i - 1] * i % mod;
  ifac[n] = spow(fac[n], mod - 2);
  for (register int i = (n - 1), iend = (1); i >= iend; i = ~(-i))
    ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;
}
int ADD(int x, int y) { return (x += y) >= mod ? x - mod : x; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  if (m < k) std::swap(m, k);
  initM(n + m + k + 5);
  for (register int i = (0), iend = (m + k); i <= iend; i = -(~i)) {
    now = 1ll * C(n - 1 + i, i) * spow(3, m + k - i) % mod;
    res = 0;
    for (register int j = (0), jend = (i); j <= jend; j = -(~j))
      if (j <= k && (i - j) <= m) res = ADD(res, C(i, j));
    ans = ADD(ans, 1ll * now * res % mod);
  }
  printf("%d\n", ADD(ans, mod));
  return 0;
}
