You can try this code and adapt it:
[CommandMethod("TestLoftCircles", CommandFlags.Modal)]
public static void TestLoftObjekt()
{
Editor editor = AcadApp.DocumentManager.MdiActiveDocument.Editor;
Database db = AcadApp.DocumentManager.MdiActiveDocument.Database;
TransMan transMgr = db.TransactionManager;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Circle Circle1 = new Circle(new Point3d(0, 0, 0), new Vector3d(0, 0, 1), 8);
Circle Circle2 = new Circle(new Point3d(1, 3, 7.5), new Vector3d(0, 0, 1), 2);
Circle Circle3 = new Circle(new Point3d(2, 2, 15), new Vector3d(0, 0, 1), 5);
btr.AppendEntity(Circle1);
btr.AppendEntity(Circle2);
btr.AppendEntity(Circle3);
trans.AddNewlyCreatedDBObject(Circle1, true);
trans.AddNewlyCreatedDBObject(Circle2, true);
trans.AddNewlyCreatedDBObject(Circle3, true);
CircularArc3d cirArc1 = new CircularArc3d(Circle1.Center, Circle1.Normal, Circle1.Radius);
CircularArc3d cirArc2 = new CircularArc3d(Circle2.Center, Circle2.Normal, Circle2.Radius);
CircularArc3d cirArc3 = new CircularArc3d(Circle3.Center, Circle3.Normal, Circle3.Radius);
int numPoints = 5;
Point3d[] sps1 = cirArc1.GetSamplePoints(numPoints);
Point3d[] sps2 = cirArc2.GetSamplePoints(numPoints);
Point3d[] sps3 = cirArc3.GetSamplePoints(numPoints);
int numCurves = numPoints - 1;
Entity[] guideCurves = new Entity[numCurves];
for (int i = 0; i < numCurves; i++)
{
Point3dCollection pnts = new Point3dCollection();
pnts.Add(sps1);
pnts.Add(sps2);
pnts.Add(sps3);
Spline sp = new Spline(pnts, 2, 0);
guideCurves.SetValue(sp, i);
}
LoftedSurface loftedSurface = new LoftedSurface();
LoftOptions loftOps = new LoftOptions();
Entity[] crossSections = { Circle1, Circle2, Circle3 };
loftedSurface.CreateLoftedSurface(crossSections, guideCurves, null, loftOps);
ObjectId loftId = btr.AppendEntity(loftedSurface);
trans.AddNewlyCreatedDBObject(loftedSurface, true);
Circle1.Erase();
Circle2.Erase();
Circle3.Erase();
trans.Commit();
}
}