// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;



#define rep(i,n) for(int (i)=0;(i)<(int)(n);(i)++)

#define rept(i,n) for(int (i)=0;(i)<=(int)(n);(i)++)

#define reps(i,s,n) for(int (i)=(s);(i)<(int)(n);(i)++)

#define repst(i,s,n) for(int (i)=(s);(i)<=(int)(n);(i)++)

#define repr(i,n) for(int (i)=(n);(i)>=0;(i)--)

#define each(itr,v) for(auto (itr):(v))

#define all(c) (c).begin(),(c).end()

#define pb push_back

#define mp(x,y) make_pair((x),(y))

#define fi first

#define se second

#define chmin(x,y) x=min(x,y)

#define chmax(x,y) x=max(x,y)

#define ln "\n"

#define dbg(x) cout<<#x" = "<<(x)<<ln



typedef long long ll;

typedef vector<int> vi;

typedef vector<ll> vl;

typedef vector<vector<int> > mat;

typedef pair<int,int> pii;

typedef pair<ll,ll> pll;



const int inf = (int)1e9;

const ll linf = (ll)1e18;

const int mod = (int)(1e9+7);

const int dx[] = {0, 1, 0, -1};

const int dy[] = {1, 0, -1, 0};

const int ddx[] = {0, 1, 1, 1, 0, -1, -1, -1};

const int ddy[] = {1, 1, 0, -1, -1, -1, 0, 1};



struct oreno_initializer {

	oreno_initializer() {

		cin.tie(0);

		ios::sync_with_stdio(0);

	}

} oreno_initializer;



// ━━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…

// .｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋

// ・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・



double n, eps = 1e-20;



int main() {

	cin >> n;

	repst(i,1,3500) {

		repst(j,1,3500) {

			double u = n*1.*i*1.*j;

			double l = 4*1.*i*1.*j - n*1.*i - n*1.*j;

			if (l!=0 && 1<=u/l && abs(round(u/l) - u/l) < eps) {

				cout << i << " " << j << " " << (int)(u/l) << ln;

				return 0;

			}

		}

	}

}

// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;



#define rep(i,n) for(int (i)=0;(i)<(int)(n);(i)++)

#define rept(i,n) for(int (i)=0;(i)<=(int)(n);(i)++)

#define reps(i,s,n) for(int (i)=(s);(i)<(int)(n);(i)++)

#define repst(i,s,n) for(int (i)=(s);(i)<=(int)(n);(i)++)

#define repr(i,n) for(int (i)=(n);(i)>=0;(i)--)

#define each(itr,v) for(auto (itr):(v))

#define all(c) (c).begin(),(c).end()

#define pb push_back

#define mp(x,y) make_pair((x),(y))

#define fi first

#define se second

#define chmin(x,y) x=min(x,y)

#define chmax(x,y) x=max(x,y)

#define ln "\n"

#define dbg(x) cout<<#x" = "<<(x)<<ln



typedef long long ll;

typedef vector<int> vi;

typedef vector<ll> vl;

typedef vector<vector<int> > mat;

typedef pair<int,int> pii;

typedef pair<ll,ll> pll;



const int inf = (int)1e9;

const ll linf = (ll)1e18;

const int mod = (int)(1e9+7);

const int dx[] = {0, 1, 0, -1};

const int dy[] = {1, 0, -1, 0};

const int ddx[] = {0, 1, 1, 1, 0, -1, -1, -1};

const int ddy[] = {1, 1, 0, -1, -1, -1, 0, 1};



struct oreno_initializer {

	oreno_initializer() {

		cin.tie(0);

		ios::sync_with_stdio(0);

	}

} oreno_initializer;



// ━━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…

// .｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋.｡.:( ^ω^)・ﾟ＋

// ・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・



ll n, u, l;



int main() {

	cin >> n;

	repst(i,1,3500) {

		repst(j,1,3500) {

			u = n*i*j;

			l = 4*i*j - n*(i+j);

			if (l>0 && u%l==0 && u/l>0) {

				cout << i << " " << j << " " << u/l << ln;

				return 0;

			}

		}

	}

}

// Fastest known solution for this problem: