#include <cstdlib>
#include <cstdio>
#include <memory>

const int MaxN = 1000010;

struct Matrix 
{
	int rowNum;
	int colNum;
	bool m[MaxN];

	Matrix() {}

	void reset(int rows, int cols)
	{
		memset(m, false, sizeof(m));
		rowNum = rows;
		colNum = cols;
	}

	bool get(int i, int j)
	{
		return m[(i - 1) * colNum + (j - 1)];
	}

	void set(int i, int j, bool val)
	{
		m[(i - 1) * colNum + (j - 1)] = val;
	}
};

Matrix M;

long long count(int X, int Y)
{
	long long X1 = X, Y1 = Y;
	long long sol = 2 * (X1 * (Y1 - 1) + Y1 * (X1 - 1));
	int x1, y1;

	M.reset(X, Y);
	for (int x = 1; x < X; x++)
		for (int y = 1; y < Y; y++)
		{
			if (!M.get(x, y))
			{
				sol += 4*(X1 - x)*(Y1 - y);
				x1 = x; y1 = y;
				while (x1 < X && y1 < Y) 
				{
					M.set(x1, y1, true);
					x1 += x; y1 += y;
				}
			}
		}

	return sol;
}

int main()
{
	freopen("vojnici.in", "r", stdin);
	freopen("vojnici.out", "w", stdout);

	int n = 0;
	scanf("%d", &n);

	long long sol = 0, curr = 0;
	int x, y;
	for (int i = 1; i * i <= n; i++)
	{
		if (n % i == 0)
		{
			curr = count(i, n / i);
			if (curr > sol)
			{
				sol = curr;
				x = i;
				y = n / i;
			}
		}
	}

	printf("%d %d %lld\n", x, y, sol);
	return 0;
}