#include #include #include using std::cin; using std::cout; const char endl = '\n'; const int N = 5005; const int mod = 998244353; template using number = std::integral_constant; template struct factorial : number(n) * factorial::value % mod> {}; template <> struct factorial<0> : number<1> {}; template constexpr std::array get_factorial_table_impl(std::integer_sequence) { return {factorial::value...}; } template constexpr auto get_factorial_table() { return get_factorial_table_impl(std::make_integer_sequence{}); } template struct inverse : number(mod - (mod / n)) * inverse::value % mod> {}; template <> struct inverse<1> : number<1> {}; template <> struct inverse<0> : number<1> {}; template struct factorial_inverse : number(factorial_inverse::value) * inverse::value % mod> {}; template <> struct factorial_inverse<1> : number<1> {}; template <> struct factorial_inverse<0> : number<1> {}; template constexpr std::array get_factorial_inverse_table_impl(std::integer_sequence) { return {factorial_inverse::value...}; } template constexpr auto get_factorial_inverse_table() { return get_factorial_inverse_table_impl(std::make_integer_sequence{}); } int a, b, c, ab, ac, bc, ans; constexpr auto fac = get_factorial_table(), fac_inv = get_factorial_inverse_table(); inline int C(int n, int m) { return static_cast(fac[n]) * fac_inv[m] % mod * fac_inv[n - m] % mod; } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); cin >> a >> b >> c; for (int i = 0; i <= std::min(a, b); i++) { ab = (ab + static_cast(C(a, i)) * C(b, i) % mod * fac[i] % mod) % mod; } for (int i = 0; i <= std::min(a, c); i++) { ac = (ac + static_cast(C(a, i)) * C(c, i) % mod * fac[i] % mod) % mod; } for (int i = 0; i <= std::min(b, c); i++) { bc = (bc + static_cast(C(b, i)) * C(c, i) % mod * fac[i] % mod) % mod; } cout << (((static_cast(ab) * ac) % mod * bc) % mod) % mod << endl; return 0; }