//============================================================================
// Author       : Sun YaoFeng
//============================================================================

//#pragma 	comment(linker, "/STACK:100240000,100240000")
//#include	<cstdio>
//#include	<cstdlib>
//#include	<cstring>
//#include	<algorithm>

#include	<bits/stdc++.h>

using	namespace	std;

#define DB		double
#define	lf		else if
#define I64		long long
#define	Rd()	(rand()<<15|rand())
#define For(i,a,b)	for(int i=a,lim=b;i<=lim;i++)
#define Rep(i,a,b)	for(int i=a,lim=b;i>=lim;i--)

#define	fi	first
#define se	second
#define MK	make_pair
#define PA	pair<int, int>

//#define	min(a,b)	((a)<(b)?(a):(b))
//#define	max(a,b)	((a)<(b)?(b):(a))

#define	CH	(ch=getchar())
int		IN()	{
		int x= 0, f= 0, ch;
		for	(; CH < '0' || ch > '9';)	f= (ch == '-');
		for	(; ch >= '0' && ch <= '9'; CH)	x= x*10 + ch -'0';
		return	f? -x : x;
}

#define	n	1000005
#define P	1000000007

int		N, M, K, T, Ans, L[n], R[n], H[n];

int		Pow(int a,int b){
		int ret=1;
		for (;b;b>>=1,a=1ll*a*a%P)
			if  (b&1)	ret=1ll*ret*a%P;
		return	ret;
}

int		C(int a, int b){
		return	1ll*L[a]*R[b]%P*R[a-b]%P;
}

int		main(int argc, char* argv[]){
		N= IN()-1;
		M= IN();
		K= IN();
		T= N+M+K;
	
		L[0]= 1;
		For(i, 1, T)	L[i]= 1ll*L[i-1]*i%P;
		
		R[T]= Pow(L[T], P-2);
		Rep(i, T, 1)	R[i-1]= 1ll*R[i]*i%P;
		
		H[0]= 1;
		For(i, 1, T)	H[i]= 1ll*H[i-1]*3%P;
		
		int sum= 1;
		For(t, 0, M+K)	{
			Ans= (1ll*C(N+t, N)*H[M+K-t]%P*sum + Ans)%P;
			sum= (sum + sum)%P;
			
			if	(t >= M)	sum= (sum - C(t, M) + P)%P;
			if	(t >= K)	sum= (sum - C(t, K) + P)%P;
		}
		printf("%d\n", Ans);
		
		return	0;
}