Petya studies in a school and he adores Maths. His class has been studying arithmetic expressions. On the last class the teacher wrote three positive integers a, b, c on the blackboard. The task was to insert signs of operations '+' and '*', and probably brackets between the numbers so that the value of the resulting expression is as large as possible. Let's consider an example: assume that the teacher wrote numbers 1, 2 and 3 on the blackboard. Here are some ways of placing signs and brackets:

  * 1+2*3=7 
  * 1*(2+3)=5 
  * 1*2*3=6 
  * (1+2)*3=9 



Note that you can insert operation signs only between a and b, and between b and c, that is, you cannot swap integers. For instance, in the given sample you cannot get expression (1+3)*2.

It's easy to see that the maximum value that you can obtain is 9.

Your task is: given a, b and c print the maximum value that you can get.

Input

The input contains three integers a, b and c, each on a single line (1 ≤ a, b, c ≤ 10).

Output

Print the maximum value of the expression that you can obtain.

Examples

Input

1
2
3


Output

9


Input

2
10
3


Output

60
import fileinput

def str_to_int(s):
	return([ int(x) for x in s.split() ])

# args = [ 'line 1', 'line 2', ... ]
def proc_input(args):
	(a, b, c) = [ int(x) for x in args ]
	return(a, b, c)

def parse(a, b, c, mask):
	mult_first = mask & 1
	parn_first = (mask & 2) >> 1
	if mult_first:
		if parn_first:
			return (a * b) + c
		return a * (b + c)
	if parn_first:
		return (a + b) * c
	return a + (b * c)
	

def solve(args, verbose=False):
	(a, b, c) = proc_input(args)
	m = -float('inf')
	for i in xrange(4):
		m = max(m, parse(a, b, c, i))
	m = max(m, a * b * c)
	m = max(m, a + b + c)
	if verbose:
		print m
	return m

def test():
	assert(str_to_int('1 2 3') == [ 1, 2, 3 ])
	assert(solve([ '1', '2', '3' ]) == 9)
	assert(solve([ '2', '10', '3' ]) == 60)

if __name__ == '__main__':
	from sys import argv
	if argv.pop() == 'test':
		test()
	else:
		solve(list(fileinput.input()), verbose=True)
