#include<bits/stdc++.h>
#define LL long long
#define MAXN 1000005
#define INF (1<<25)
#define P int(1e9+7)
using namespace std;

int N,K,M;
int NN = 1e6;

LL fac[MAXN], ifac[MAXN];

LL qpow(LL x, int n){
	LL res = 1;
	while(n){
		if(n & 1) res = res * x % P;
		x = x * x % P;
		n /= 2;
	}
	return res;
}

LL comb(int n, int k){
	return fac[n]*ifac[n-k]%P*ifac[k]%P;
}

void init(){
	fac[0] = ifac[0] = 1;
	for(int i=1;i<=NN;i++){
		fac[i] = fac[i-1] * i % P;
		ifac[i] = qpow(fac[i], P-2);
	}
}

int main(){
	
	cin>>N>>M>>K;
	if(M > K) swap(M,K);
	
	init();
	// M < K
	
	LL ans = 0;
	LL n = 1;
	for(int i=0;i<=M+K;i++){
		if(i==0) n = 1;
		else if(i<=M) n = n*2%P;
		else if(i<=K) n = (n*2%P - comb(i-1,M) + P)%P;
		else n = (n*2%P - comb(i-1,i-1-K) - comb(i-1,M) + 2*P)%P;
		ans = (ans + comb(N-1+i,N-1)*qpow(3,M+K-i)%P * n % P) % P;
	}
	
	cout<<ans<<endl;
	
	return 0;
}