#include <bits/stdc++.h>
using namespace std;
const long long mdl = 1000000007LL;
long long p2(long long a) { return (1LL << a); }
long long pw(long long a, long long b, long long lm = 62) {
  a %= mdl;
  if (a < 0) a += mdl;
  long long r = 1;
  for (long long i = lm; i >= 0; --i) {
    r = r * r % mdl;
    if (b & p2(i)) r = r * a % mdl;
  }
  return r;
}
long long inv(long long a) {
  a %= mdl;
  if (a < 0) a += mdl;
  assert(a != 0);
  return pw(a, mdl - 2, 30);
}
vector<long long> fc, invfc;
long long ncr(long long a, long long b) {
  if (b == 0 || b == a) return 1;
  if (b < 0 || b > a) return 0;
  return fc[a] * invfc[b] % mdl * invfc[a - b] % mdl;
}
void inifc() {
  const long long mxfc = 1001000;
  fc.resize(mxfc);
  invfc.resize(mxfc);
  fc[0] = fc[1] = invfc[0] = invfc[1] = 1;
  for (long long i = 2; i < mxfc; ++i) {
    fc[i] = fc[i - 1] * i % mdl;
    invfc[i] = invfc[mdl % i] * (mdl - mdl / i) % mdl;
  }
  for (long long i = 2; i < mxfc; ++i) {
    invfc[i] *= invfc[i - 1];
    invfc[i] %= mdl;
  }
}
void fl(vector<long long>& v, long long c) {
  v.resize(1e6);
  v[0] = 1;
  for (long long i = 1; i < (long long((v).size())); ++i)
    v[i] = v[i - 1] * c % mdl;
}
long long inv2;
vector<long long> vp3, vp2, invp2;
long long wl(long long n, long long m, long long k) {
  long long tf = 0;
  long long wc = 0;
  for (long long a = n; a <= n + m; ++a) wc += ncr(n + m, a);
  wc %= mdl;
  long long wr = 0;
  for (long long cc = 0; cc <= k; ++cc) {
    wr += (vp3[k] - tf) * invp2[cc] % mdl * ncr(n + m, cc) % mdl;
    tf += ncr(k, cc) * vp2[cc];
    tf %= mdl;
  }
  wr %= mdl;
  if (wr < 0) wr += mdl;
  wc *= wr;
  wc %= mdl;
  return wc;
}
long long sm = 0;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  inifc();
  long long n, m, k;
  cin >> n >> m >> k;
  inv2 = inv(2);
  fl(vp3, 3);
  fl(vp2, 2);
  fl(invp2, inv2);
  sm += wl(n, m, k);
  sm += wl(n, k, m);
  for (long long a = 0; a < (m + 1); ++a) {
    for (long long b = 0; b < (k + 1); ++b) {
      sm -= ncr(n + m + k, a) * ncr(n + m + k - a, b) % mdl;
    }
    sm %= mdl;
  }
  sm %= mdl;
  if (sm < 0) sm += mdl;
  cout << sm << endl;
  return 0;
}
