// Original C++ solution (slower):
/*

　　　∫ ∫ ∫

　　　ノヽ

　　（＿　 ）

　（＿　　　 ）

（＿＿＿＿＿＿ ）

　ヽ(´･ω･)ﾉ　

　　 |　 /

　　 UU

*/

#include <bits/stdc++.h>

typedef long long int64;

using namespace std;

using P = pair<int64, int64>;

typedef vector<int> vi;

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

const int64 INF = 1LL << 62;

const int inf = 1<<30;

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }

template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

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

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

#define ALL(obj) (obj).begin(), (obj).end() //コンテナじゃないと使えない!!

#define debug(x) cerr << #x << ": " << x << "\n";

#define mp make_pair

template <typename T>

ostream& operator<<(ostream& os, vector<T> &V){

    int N = V.size();

    REP(i,N){

        os << V[i];

        if (i!=N-1) os << " ";

    }

    os << "\n";

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, pair<T,T> const&P){

    os << P.first;

    os << " ";

    os << P.second;

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, set<T> &S){

    auto it=S.begin();

    while(it!=S.end()){

        os << *it;

        os << " ";

        it++;

    }

    os << "\n";

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, deque<T> &q){

    for(auto it=q.begin();it<q.end();it++){

        os<<*it;

        os<<" ";

    }

     os<<endl;

    return os;

}

vector<pair<int,int>> dxdy = {mp(0,1),mp(1,0),mp(-1,0),mp(0,-1)};

//fixed<<setprecision(10)<<ans<<endl;



int64 gcd(int64 a, int64 b){

    if(b==0) return a;

    return gcd(b,a%b);

}

int64 lcm(int64 n, int64 m){

    return n * (m / gcd(n, m));

}



int main(){

    cin.tie(0);

    ios::sync_with_stdio(false);

    int N;

    cin >> N;



    int upper = 3500;

    int64 G,numerator,denomirator,G2,numerator2,denomirator2;

    for(int h=1;h<=upper;h++){

        for(int n=h;n<=upper;n++){

            int64 LCM = lcm(lcm(n,h),N);

            numerator = LCM*4/N - LCM/h - LCM/n;

            denomirator = LCM;



            if(numerator < 0 or denomirator < 0) continue;

            if(gcd(numerator, denomirator) == numerator){

                cout << h << " " << n << " " << denomirator/numerator << "\n";

                return 0;

            }



        }

    }    

}

// Optimized solution to the same problem (faster):
/*

　　　∫ ∫ ∫

　　　ノヽ

　　（＿　 ）

　（＿　　　 ）

（＿＿＿＿＿＿ ）

　ヽ(´･ω･)ﾉ　

　　 |　 /

　　 UU

*/

#include <bits/stdc++.h>

typedef long long int64;

using namespace std;

using P = pair<int64, int64>;

typedef vector<int> vi;

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

const int64 INF = 1LL << 62;

const int inf = 1<<30;

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }

template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

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

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

#define ALL(obj) (obj).begin(), (obj).end() //コンテナじゃないと使えない!!

#define debug(x) cerr << #x << ": " << x << "\n";

#define mp make_pair

template <typename T>

ostream& operator<<(ostream& os, vector<T> &V){

    int N = V.size();

    REP(i,N){

        os << V[i];

        if (i!=N-1) os << " ";

    }

    os << "\n";

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, pair<T,T> const&P){

    os << P.first;

    os << " ";

    os << P.second;

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, set<T> &S){

    auto it=S.begin();

    while(it!=S.end()){

        os << *it;

        os << " ";

        it++;

    }

    os << "\n";

    return os;

}

template <typename T>

ostream& operator<<(ostream& os, deque<T> &q){

    for(auto it=q.begin();it<q.end();it++){

        os<<*it;

        os<<" ";

    }

     os<<endl;

    return os;

}

vector<pair<int,int>> dxdy = {mp(0,1),mp(1,0),mp(-1,0),mp(0,-1)};

//fixed<<setprecision(10)<<ans<<endl;



int64 gcd(int64 a, int64 b){

    if(b==0) return a;

    return gcd(b,a%b);

}

int64 lcm(int64 n, int64 m){

    return n * (m / gcd(n, m));

}



int main(){

    cin.tie(0);

    ios::sync_with_stdio(false);

    int N;

    cin >> N;



    int upper = 3500;

    int64 numerator,denomirator;

    for(int64 h=1;h<=upper;h++){

        for(int64 n=h;n<=upper;n++){

            numerator = 4*h*n - N*n - N*h;

            denomirator = h*n*N;



            if(numerator <= 0 or denomirator <= 0) continue;

            if(denomirator%numerator==0){

                cout << h << " " << n << " " << denomirator/numerator << "\n";

                return 0;

            }



        }

    }    

}

// Fastest known solution for this problem: