#include <bits/stdc++.h>
using namespace std;
const long long int INF = (long long int)1e9 + 10;
const long long int INFLL = (long long int)1e18 + 10;
const long double EPS = 1e-12;
const long long int MOD = 1e9 + 7;
template <class T>
T &chmin(T &a, const T &b) {
  return a = min(a, b);
}
template <class T>
T &chmax(T &a, const T &b) {
  return a = max(a, b);
}
template <class T>
inline T sq(T a) {
  return a * a;
}
long long int in() {
  long long int x;
  scanf("%lld", &x);
  return x;
}
char yuyushiki[1000010];
string stin() {
  scanf("%s", yuyushiki);
  return yuyushiki;
}
struct Mod {
  unsigned n;
  Mod() : n(0) {}
  Mod(long long int x) {
    if (x < 0)
      n = x % MOD + MOD;
    else
      n = x % MOD;
  }
};
Mod operator+(Mod a, Mod b) { return Mod(a.n + b.n); }
Mod operator+=(Mod &a, Mod b) { return a = a + b; }
Mod operator-(Mod a) { return Mod(MOD - a.n); }
Mod operator-(Mod a, Mod b) { return Mod(a.n + MOD - b.n); }
Mod operator-=(Mod &a, Mod b) { return a = a - b; }
Mod operator*(Mod a, Mod b) { return Mod((long long int)a.n * b.n); }
Mod operator*=(Mod &a, Mod b) { return a = a * b; }
Mod modpow(Mod x, long long int k) {
  Mod res = 1;
  while (k) {
    if (k & 1) res *= x;
    k /= 2;
    x *= x;
  }
  return res;
}
long long int extgcd(long long int a, long long int b, long long int &x,
                     long long int &y) {
  long long int d = a;
  if (b != 0) {
    d = extgcd(b, a % b, y, x);
    y -= a / b * x;
  } else {
    x = 1, y = 0;
  }
  return d;
}
Mod inv(Mod a) {
  long long int x, y;
  assert(extgcd(a.n, MOD, x, y) == 1);
  return Mod(x);
}
Mod operator/(Mod a, Mod b) { return Mod((long long int)a.n * inv(b).n); }
Mod operator/=(Mod &a, Mod b) { return a = a / b; }
struct Factorial {
  vector<Mod> v;
  Factorial(int max_n) {
    v = vector<Mod>(max_n, 1);
    for (long long int i = (1); i < (long long int)(max_n); i++)
      v[i] = v[i - 1] * i;
  }
  int size() { return v.size(); }
  Mod operator[](int id) { return v[id]; }
};
struct Factorial_inv {
  vector<Mod> v;
  Factorial_inv(Factorial &f) {
    v = vector<Mod>(f.size());
    for (long long int i = (0); i < (long long int)(f.size()); i++)
      v[i] = inv(f[i]);
  }
  Mod operator[](int id) { return v[id]; }
};
struct Combination {
  Factorial *f;
  Factorial_inv *finv;
  Combination(Factorial &arg_f, Factorial_inv &arg_finv) {
    f = &arg_f;
    finv = &arg_finv;
  }
  Mod operator()(int a, int b) { return (*f)[a] * (*finv)[b] * (*finv)[a - b]; }
};
Factorial fact(1000010);
Factorial_inv finv(fact);
Combination comb(fact, finv);
int n, m, k;
int main() {
  n = in();
  m = in();
  k = in();
  Mod ans = 0;
  Mod sum = 1;
  for (long long int i = (0); i < (long long int)(m + k + 1); i++) {
    ans += comb(n - 1 + i, i) * sum * modpow(3, m + k - i);
    sum *= 2;
    if (i >= m) {
      sum -= 2 * comb(i, i - m);
    }
  }
  cout << ans.n << endl;
  return 0;
}
