#include <bits/stdc++.h>

using namespace std;

const int N = 3e5 +10, MOD = 1e9 + 7;

int n, m, k, a[N << 2], b[N << 2], c[N << 2], d[N << 2], sum, ans;

int zadd (int a, int b) {return a + b >= MOD ? a + b - MOD : a + b;}
int zsub (int a, int b) {return a - b < 0 ? a - b + MOD : a - b;}
int zmul (int a, int b) {return (long long)a * b % MOD;}

void init ()
{
	scanf ( "%d%d%d" , &n, &m, &k);
	a[0] = b[0] = c[1] = d[0] = 1;
	for (int i = 2; i <= N * 3; ++ i)
		c[i] = zmul (zsub (MOD, MOD / i), c[MOD % i]);
	for (int i = 1; i <= N * 3; ++ i)
	{
		a[i] = zmul (a[i - 1], 3);
		b[i] = zmul (b[i - 1], i);
		d[i] = zmul (d[i - 1], c[i]);
	}
}

int gg (int x, int y){return zmul (b[x], zmul (d[y], d[x - y]) );}

void work ()
{
	if (m < k) swap(m, k); -- n;
	sum = 0, ans = 1;
	for (int i = 0; i <= m + k; ++ i)
	{
		sum = zadd (sum, zmul (gg (n + i, n), zmul (a[m + k - i], ans) ) );
		if (i < k) ans = zmul (ans, 2);
		else if (i < m) ans = zsub (zmul (ans, 2), gg (i, k) );
		else ans = zsub (zmul (ans, 2), zadd (gg (i, m), gg (i, k) ) );
	}
}

void prin ()
{
	printf ( "%d" , sum);
}

int main ()
{
	init ();
	work ();
	prin ();
	return 0;
}