#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>

using namespace std;
#define MAXN 900000
#define MOD 1000000007
#define rint register int
#define gc() getchar()
inline int read(rint ans = 0, rint sgn = ' ', rint ch = gc())
{
	for(; ch < '0' || ch > '9'; sgn = ch, ch = gc());
	for(; ch >='0' && ch <='9';(ans*=10)+=ch-'0', ch = gc());
	return sgn-'-'?ans:-ans;
}
#define BUF_SIZE 1000000
#define _END fwrite(_Ob,1,_O-_Ob,stdout), _O = _Ob
#define Outc(a) (*_O++ = a)
char _Ob[BUF_SIZE+5], *_O = _Ob, _Os[25], *_Ot;
template <typename T> inline void Out(T x)
{
	if(!x){Outc('0'); return;} if(x < 0) Outc('-'), x = -x;
	for(_Ot = _Os; x; *_Ot++ = x%10+'0', x /= 10);
	for(; _Ot != _Os; Outc(*--_Ot)); if(_O-_Ob >= BUF_SIZE-50) _END;
}
int N, M, K, T, L, R, S, B[MAXN+5], fac[MAXN+5], efac[MAXN+5], ans;
inline int fastpow(int s, int n){int a = 1; for(; n; n&1 ? a = 1ll*a*s%MOD : 0, s = 1ll*s*s%MOD, n >>= 1); return a;}
inline int C(int n, int k){return n<0||k<0||n<k?0:1ll*fac[n]*efac[k]%MOD*efac[n-k]%MOD;}
int main()
{
	N = read(), M = read(), K = read(), T = N+M+K, S = 1;
	B[0] = 1; for(rint i = 1; i <= T; B[i] = 3u*B[i-1]%MOD, i++);
	fac[0] = 1; for(rint i = 1; i <= T; fac[i] = 1ll*i*fac[i-1]%MOD, i++);
	efac[T] = fastpow(fac[T],MOD-2); for(rint i = T; i; efac[i-1] = 1ll*i*efac[i]%MOD, i--);
	for(rint p = N; p <= T; )
	{
		ans = (ans+1ll*B[T-p]*C(p-1,N-1)%MOD*S)%MOD;
		S = (2ll*S+C(p-N,L-1)+C(p-N,R+1))%MOD, ++p, ++R;
		p-N-L > K ? S = (S+MOD-C(p-N,L)), S<MOD?:S-=MOD, ++L : 0;
		R > M ? S = (S+MOD-C(p-N,R)), S<MOD?:S-=MOD, --R : 0; if(L>R) break;
	}	printf("%d\n",ans); return 0;
}