The start of the new academic year brought about the problem of accommodation students into dormitories. One of such dormitories has a a × b square meter wonder room. The caretaker wants to accommodate exactly n students there. But the law says that there must be at least 6 square meters per student in a room (that is, the room for n students must have the area of at least 6n square meters). The caretaker can enlarge any (possibly both) side of the room by an arbitrary positive integer of meters. Help him change the room so as all n students could live in it and the total area of the room was as small as possible.


-----Input-----

The first line contains three space-separated integers n, a and b (1 ≤ n, a, b ≤ 10^9) — the number of students and the sizes of the room.


-----Output-----

Print three integers s, a_1 and b_1 (a ≤ a_1; b ≤ b_1) — the final area of the room and its sizes. If there are multiple optimal solutions, print any of them.


-----Examples-----
Input
3 3 5

Output
18
3 6

Input
2 4 4

Output
16
4 4

Difficulty: interview

Starter code:

Solutions:
"""
Codeforces Contest 266 Div 2 Problem B

Author  : chaotic_iak
Language: Python 3.3.4
"""

def ceildiv(a,b):
    return a//b + (1 if a%b else 0)

def main():
    n,a,b = read()
    s = 6*n
    if a*b >= s:
        print(a*b)
        print(a,b)
        return
    t = int((6*n) ** .5)
    tgt = 9001*n
    tgta = 0
    tgtb = 0
    for i in range(1, t+1):
        c = ceildiv(s,i)
        if a <= i and b <= c:
            if tgt > i*c:
                tgt = i*c
                tgta = i
                tgtb = c
        if b <= i and a <= c:
            if tgt > i*c:
                tgt = i*c
                tgtb = i
                tgta = c
    print(tgt)
    print(tgta,tgtb)

################################### NON-SOLUTION STUFF BELOW

def read(mode=2):
    # 0: String
    # 1: List of strings
    # 2: List of integers
    inputs = input().strip()
    if mode == 0: return inputs
    if mode == 1: return inputs.split()
    if mode == 2: return list(map(int, inputs.split()))

def write(s="\n"):
    if s is None: s = ""
    if isinstance(s, list): s = " ".join(map(str, s))
    s = str(s)
    print(s, end="")

write(main())

from math import *
n,a,b = map(int,input().split())
ans = (10000005700000,1000000000064000)
ansp = 10**55
if a*b>=6*n:
    ans = (a,b)
    ansp = a*b

for x in range(int(sqrt(6*n)*1.33)):
    yy = max(0,ceil((6*n-a*b-b*x)/(a+x))-1)
    for y in range(yy,yy+3):
        if 6*n<=(a+x)*(b+y)<ansp:
            ansp=(a+x)*(b+y)
            ans = (a+x,b+y)
a,b = b,a
for x in range(int(sqrt(6*n)*1.44)):
    yy = max(0,ceil((6*n-a*b-b*x)/(a+x))-1)
    for y in range(yy,yy+3):
        if 6*n<=(a+x)*(b+y)<ansp:
            ansp=(a+x)*(b+y)
            ans = (b+y,a+x)

print (ansp)
print(*ans)

def main():
    n, a, b = list(map(int, input().split()))

    s = 6 * n

    if a * b >= s:
        print(a*b)
        print(a, b)
        return
    
    ma, mb = min(a, b), max(a, b)

    _s = float('inf')
    _a = 0
    
    for i in range(min(int(s**0.5)+1, s // mb), ma - 1, -1):
        _b = (s + i - 1) // i
        si = i * _b
        if _s > si:
            _a, _s = i, si
            if si == s:
                break
    print(_s)
    _b = _s // _a
    if not (a <= _a and b <= _b):
        _a, _b = _b, _a
    print(_a, _b)


def __starting_point():
    main()


__starting_point()

def solve(n, a, b):
    need = n * 6

    orig_a, orig_b = a, b

    if a < b:
        a, b = b, a

    y = b

    best_prod = None
    best = (None, None)

    while True:
        x, modulo = divmod(need, y)

        if modulo:
            x += 1

        if x < a:
            x = a

        prod = x * y

        if not best_prod or best_prod > prod:
            best_prod = prod
            best = (x, y)

        if best_prod == need:
            break

        y += 1

        if x < y:
            break

        if x < a or y < b:
            break

    x, y = best
    if x < orig_a or y < orig_b:
        best = (y, x)

    return best

def __starting_point():
    n, a, b = list(map(int, input().split()))
    x, y = solve(n, a, b)
    print(x * y)
    print(x, y)

__starting_point()

import math

#input
n,a,b=map(int,input().split())

#variables
x=6*n-1

#main
if a*b>6*n:
	print(a*b)
	print(str(a)+' '+str(b))
	quit()

while True:
	x+=1
	for i in range(min(a,b),math.floor(math.sqrt(x))+1):
		if x%i==0:
			if i>=a and x/i>=b:
				print(x)
				print(str(i)+' '+str(x//i))
				quit()
			if i>=b and x/i>=a:
				print(x)
				print(str(x//i)+' '+str(i))
				quit()

from math import *
from itertools import *
n, a, b = map(int, input().split())
if a * b >= 6 * n:
  print(a * b)
  print(a, b)
else:
  p = ceil(sqrt(6 * n))
  s, a1, b1 = min(chain(((x * ceil(6 * n / x), x, ceil(6 * n / x)) for x in range(a, p + 1) if ceil(6 * n / x) >= b), \
                        ((ceil(6 * n / y) * y, ceil(6 * n / y), y) for y in range(b, p + 1) if ceil(6 * n / y) >= a)))
  print(s)
  print(a1, b1)

import math
n, a, b = list(map(int, input().split()))
s = 6*n
if a*b >= s:
    print(a*b)
    print(a, b)
else:
    aa, bb = a, b
    area = float('inf')
    _a = 0
    for i in range(min(math.ceil(s**0.5), s // max(a, b)), min(a, b)-1, -1):
        _b = math.ceil(s/i)
        _s = _b * i
        if _s <= area:
            area, _a = _s, i
            if _s == s:
                break
    print(area)
    _b = area//_a
    if not (aa <= _a and bb <= _b):
        _a, _b = _b, _a
    print(_a, _b)




from math import ceil

n, a, b = map(int, input().split())

s = 6 * n

if a * b >= s:
    na, nb = a, b
else:
    a1, b1 = min(a, b), max(a, b)
    q = [(x, ceil(s / x)) for x in range(a1, ceil(s ** .5)) if ceil(s / x) > b1]
    na, nb = min(q, key=lambda c: c[0] * c[1])
    if na < a:
        na, nb = nb, na

print(na * nb)
print(na, nb)

a, b, c = list(map(int, input().split(' ')))
def solve(a, b, c):
    if b >= c:
        b, c = c, b
    for i in range(max(6*a, b*c), 10**50):
        for j in range(b, int(i**0.5)+1):
            if i%j==0:
                if int(i/j)>=c:
                    return (i, j, int(i/j))
x, y, z = solve(a, b, c)

print(x)
if y>=b and z>=c:
    print(y, z)
else:
    print(z, y)


n, a, b = map(int, input().split())
n = 6 * n
s = a * b
if s >= n:
    print(s)
    print(a, b)
    return
m = int(n ** 0.5) + 1
s = (a + m) * (b + m)
for x in range(a, m):
    y = max((n - 1) // x + 1, b)
    if x * y < s:
        s = x * y
        u, v = x, y
for y in range(b, m):
    x = max((n - 1) // y + 1, a)
    if x * y < s:
        s = x * y
        u, v = x, y
print(s)
print(u, v)

from math import ceil

n, a, b = list(map(int, input().split()))
s = n * 6

if s <= a * b:
    na, nb = a, b
else:
    a1, b1 = min(a, b), max(a, b)
    q = [(x, ceil(s / x)) for x in range(a1, ceil(s ** .5)) if ceil(s / x) > b1]
    na, nb = min(q, key = lambda c : c[0] * c[1])
    if na < a:
        na, nb = nb, na

print(na * nb)
print(na, nb)


n,a,b = list(map(int, input().split(' ')))
A = 6*n
if a*b >= 6*n :
    print(a*b)
    print(a,b)
else :
    R = []
    temp = float("INF")
    for i in range(1, int(A**0.5)+2) :
        j = A//i
        if i*j < A : j+=1
        x = max([a,b,i,j])
        y = max(min(a,b) , min(i,j))
        if temp > x*y :
            temp = x*y
            if b>a : x,y = y,x
            R = [x,y, temp]
    print(R[2])
    print(R[0], R[1])
        


__author__ = 'trunghieu11 - vuondenthanhcong11@gmail.com'

# ---------- Actual Code ----------

count, a, b = list(map(int, input().split()))
areaNeed = 6 * count

if a * b >= areaNeed:
    print(a * b)
    print(a, b)
    return

isSwap = False
if a > b:
    a, b = b, a
    isSwap = True

answerArea = 10**10
answerA = -1
answerB = -1

for i in range(a, int(areaNeed ** 0.5) + 1):
    curB = (areaNeed + i - 1) // i
    if curB >= b:
        curArea = i * curB
        if curArea < answerArea:
            answerArea = curArea
            answerA = i
            answerB = curB

if isSwap:
    answerA, answerB = answerB, answerA

print(answerArea)
print(answerA, answerB)

# ---------- My Tools -------------


from math import sqrt,ceil;
def main():
    n,a,b = [int(i) for i in input().split()]
    swaped = 0
    if (a > b):
        a,b = b,a
        swaped = 1
    if (a*b >= 6*n):
        print(a*b)
        print(a,b)
        return 0
    new_a_max = ceil(sqrt(6*n))
    ans = []
    for newa in range(a,new_a_max+1):
        newb = ceil((6*n)/newa)
        if (newa*newb >= 6*n and newb >= b):
            ans.append([newa*newb,newa,newb])
    ans = sorted(ans)
    if (swaped):
        ans[0][1],ans[0][2] = ans[0][2],ans[0][1]
    print(ans[0][0])
    print(ans[0][1],ans[0][2])
def __starting_point():
    main()

__starting_point()

from math import sqrt
from math import ceil

(n, a, b) = list(map(int, input().split(' ')))
batas = ceil(sqrt(6 * n))
luas = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + \
    100
p, l = 0, 0

if a * b >= 6 * n:
    print(a * b)
    print("%d %d" % (a, b))
    return

for i in range(a, max(a, batas + 1)):
    lenmin = ceil(float(6 * n) / i)
    if lenmin < b:
        continue
    if lenmin * i == 6 * n:
        print("%d\n%d %d" % (6 * n, i, lenmin))
        return
    if lenmin * i > 6 * n:
        if lenmin * i < luas:
            p = i
            l = lenmin
            luas = lenmin * i

for i in range(b, max(b, batas + 1)):
    lenmin = ceil(float(6 * n) / i)
    if lenmin < a:
        continue
    if lenmin * i == 6 * n:
        print("%d\n%d %d" % (6 * n, lenmin, i))
        return
    if lenmin * i > 6 * n:
        if lenmin * i < luas:
            p = lenmin
            l = i
            luas = lenmin * i

print("%d\n%d %d" % (p * l, p, l))



import sys

try:
    while True:
        n, a, b = list(map(int, input().split(" ")))
        flag = False
        if a > b:
            flag = True
            a, b = b, a
        if 6*n <= a * b:
            print(a*b)
            res = str(a) + " " + str(b)
            print(res)
            continue
        res = 1 << 60
        i = a
        ans1 = 0
        ans2 = 0
        while i*i <= 6 * n:
            tmp = 6*n//i
            if tmp * i < 6 * n:
                tmp += 1
            if tmp < b:
                i += 1
                continue
            if i*tmp < res:
                res = i * tmp
                ans1 = i
                ans2 = tmp
            i += 1
        if flag:
            ans1, ans2 = ans2, ans1
        print(res)
        ans = str(ans1) + " " + str(ans2)
        print(ans)


except EOFError:
    pass


import math

n,a,b=list(map(int,input().split()))
target=6*n
if(target<a*b):
    p=a
    q=b
else:
    m=int(target ** 0.5)+1
    s=(a+m)*(b+m)
    for i in range(a,m):
        bb=max(math.ceil(target/i),b)
        if(i*bb<s):
            s=i*bb
            p=i
            q=bb
    for j in range(b,m):
        aa=max(math.ceil(target/j),a)
        if(j*aa<s):
            s=j*aa
            p=aa
            q=j
print(p*q)
print(p,q)


from math import ceil

n, a, b = map(int, input().split())

s = 6 * n

if a * b >= s:
    x, y = a, b
else:
    a1, b1 = min(a, b), max(a, b)
    q = [(x, ceil(s / x)) for x in range(a1, ceil(s ** .5)) if ceil(s / x) > b1]
    x, y = min(q, key=lambda c: c[0] * c[1])
    if x < a:
        x, y = y, x

print(x * y)
print(x, y)

import math
x=[]
count=0
n,a,b=list(map(int,input().split()))
if a>b:
    count=1
if a*b>=n*6:
    print(a*b)
    print(a,b)
elif max(a,b)<=n and min(a,b)<=6:
    print(n*6)
    if count==1:
        print(max(n,6),min(n,6))
    else:
        print(min(n,6),max(n,6))
else:
    for i in range(min(a,b),min(math.ceil(n*6/min(a,b)),int((6*n)**0.5)) + 1):
        if math.ceil(n*6/i)>=max(a,b):
            x.append([math.ceil(n*6/i) * i,i])
    x.sort()
    print(x[0][0])
    if count==1:
        print(max(x[0][1],x[0][0]//x[0][1]),min(x[0][1],x[0][0]//x[0][1]))
    else:
        print(min(x[0][1],x[0][0]//x[0][1]),max(x[0][1],x[0][0]//x[0][1]))


n,a,b=list(map(int,input().split()))
if a*b>=6*n:
    print(a*b)
    print(a,b)
else:
    sq,ansx,ansy,ar=round(((6*n)**0.5)),1e9,1e9,1e18
    for i in range(1,sq+6):
        p,q=i,(6*n+i-1)//i
        if max(p,q)>=max(a,b) and min(p,q)>=min(a,b):
            if ar>p*q:
                ar=p*q
                ansx,ansy=min(p,q),max(p,q)
    print(ansx*ansy)
    if ansx>=a and ansy>=b:
        print(ansx,ansy)
    else:
        print(ansy,ansx)

from math import ceil



n, a, b = list(map(int, input().split()))



s = 6 * n



if a * b >= s:

    x, y = a, b

else:

    a1, b1 = min(a, b), max(a, b)

    q = [(x, ceil(s / x)) for x in range(a1, ceil(s ** .5)) if ceil(s / x) > b1]

    x, y = min(q, key=lambda c: c[0] * c[1])

    if x < a:

        x, y = y, x



print(x * y)

print(x, y)



# Made By Mostafa_Khaled


import math

n, a, b = list(map(int, input().strip().split()))
min_sq = n * 6

if a * b >= min_sq:
    print('{}\n{} {}'.format(a * b, a, b))
else:
    max_sq = math.inf

    swap = False
    if a > b:
        a, b = b, a
        swap = True

    a_n, b_n = a, b


    for i in range(a, int(math.ceil(math.sqrt(min_sq))) + 1):
        n_b = int(math.ceil(min_sq / i))

        if n_b < b:
            continue

        new_sq = n_b * i
        if new_sq < max_sq:
            max_sq = new_sq
            a_n = i
            b_n = n_b
    
    if swap:
        a_n, b_n = b_n, a_n
    print('{}\n{} {}'.format(max_sq, a_n, b_n))


n, a , b = list(map(int, input().split()))
n *= 6
swapped = False
if a > b:
    a, b = b, a
    swapped = True
a, b = min(a,b), max(a,b)
a1, b1 = a, b
s = (1<<61)
for i in range(a, int(n**0.5)+1):
    j = max(b1, (n-1) // i + 1)
    if i * j < s:
        s = i * j
        a, b = i, j
print(a * b)
if swapped:
    print(b, a)
else:
    print(a, b)


from math import sqrt
n, a, b=map(int, input().split())
p, x, y=a*b, a, b
n*=6
if n>p:
	i=min(x, y)
	j=min((n//max(x, y)), int(sqrt(n)))+1
	p=n*(a+b)
	for e in range(i, j):
		k=(n+e-1)//e
		if e*k<p:
			p=e*k
			x=e
			y=k
			if p==n:
				break
if (a>b and x<y) or (a<b and x>y):
	x, y=y, x
print(p)
print(x, y)