#include <vector>
#include <cassert>
#include <iostream>
using namespace std;
int A, B, C, pw[900009], fact[900009], inv[900009], finv[900009], mod = 1000000007;
int comb(int x, int y) {
	return y < 0 || x < y ? 0 : 1LL * fact[x] * finv[y] % mod * finv[x - y] % mod;
}
int main() {
	cin >> A >> B >> C;
	pw[0] = fact[0] = inv[1] = finv[0] = 1;
	for (int i = 1; i <= A + B + C; i++) {
		if (i >= 2) inv[i] = 1LL * inv[mod % i] * (mod - mod / i) % mod;
		pw[i] = 3LL * pw[i - 1] % mod;
		fact[i] = 1LL * fact[i - 1] * i % mod;
		finv[i] = 1LL * finv[i - 1] * inv[i] % mod;
	}
	int ret = 0, cur = 1;
	for (int i = 0; i <= B + C; i++) {
		if (i > B) cur = (cur - comb(i - 1, B) + mod) % mod;
		if (i > C) cur = (cur - comb(i - 1, C) + mod) % mod;
		ret = (ret + 1LL * pw[B + C - i] * cur % mod * comb(A + i - 1, A - 1)) % mod;
		cur = 2 * cur % mod;
	}
	cout << ret << endl;
	return 0;
}