#include <bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 1e9 + 7;

class Combination{
public:
  typedef long long ll;
  ll N;
  ll mod;
  vector<ll> fac;
  vector<ll> finv;
  vector<ll> inv;
  
  
  Combination(ll N = 1e6,ll mod = 1e9 + 7): N(N), mod(mod), fac(N+1), finv(N+1), inv(N+1){
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for(int i = 2; i <= N; i++){
      fac[i] = fac[i-1] * i % mod;
      inv[i] = mod - inv[mod%i] * (mod / i) % mod;
      finv[i] = finv[i-1] * inv[i] % mod;
    }
  }

  function<ll(ll,ll)> get = [&](ll n,ll r){
    if( n < r ) return 0LL;
    if( n < 0 || r < 0) return 0LL;
    return fac[n] * (finv[r] * finv[n-r] % mod) % mod;
  };

};

auto nCr = (new Combination())->get;  

int N, M, K, A[1000000];
int dp[600005];

signed main(){
  
  A[0] = 1;
  
  for(int i=1;i<1000000;i++) A[i] = A[i-1] * 3 % mod;
  
  cin>>N>>M>>K;
  
  dp[0] = 1;
  
  for(int i=0;i<M+K;i++){
    
    dp[i+1] = dp[i] * 2;
    
    dp[i+1] -= nCr( i, M );
    
    dp[i+1] -= nCr( i, K );
    
    dp[i+1] += mod * 2;
    
    dp[i+1] %= mod;
    
  }
  
  int ans = 0;
  
  for(int i=N;i<=N+M+K;i++){
    
    ans += ( dp[i-N] * nCr( i - 1, N - 1 ) % mod ) * A[(N+M+K)-i] % mod;
    
    ans %= mod;
    
  }
  
  cout<<ans<<endl;
  
  return 0;
}
