transform.position not working for me. What is wrong with my code?

I simply do not understand what is wrong with my code. Everything compiles fine, but when I try to pick up an object, the object just gets shoved forward.

// Lance Lindsey
using UnityEngine;
using System.Collections;

public class Raycast : MonoBehaviour {
	private GameObject mainCamera; 
	private bool inSight;
	public string pickupMsg; 
	public float distance;
	public float smooth;


	// Use this for initialization
	void Start () {
		inSight = false;
		mainCamera = GameObject.FindWithTag ("MainCamera");
	
	}
	
	// Update is called once per frame
	void Update () {
		Vector3 fwd = transform.TransformDirection (Vector3.forward);
		RaycastHit hit; 

		if(Physics.Raycast (transform.position, fwd, out hit))
		{
			Rigidbody rBody = hit.transform.gameObject.GetComponent<Rigidbody>();
			Pickupable p = hit.transform.gameObject.GetComponent<Pickupable>();
			//print (rBody);
			//print (p);

			if(rBody != null && p != null)
			{
				GameObject obj = hit.transform.gameObject;
				if(hit.distance <= 5 && obj != null)
				{
					inSight = true;
					if(Input.GetKeyDown (KeyCode.E))
					{
						carryObject (obj);
					}
				}
				else
					inSight = false;
			}
		}
	
	}
	void carryObject(GameObject o)
	{
		o.rigidbody.useGravity = false;
		o.transform.position = Vector3.Lerp (o.transform.position, mainCamera.transform.position + mainCamera.transform.forward * distance, Time.deltaTime * smooth);
	}
	void OnGUI()
	{
		GUI.Label (new Rect (Screen.width / 2, Screen.height / 2, 50, 50), "X");

		if (inSight == true) {
			int width = pickupMsg.Length * 10;
			GUI.Box(new Rect(10, 10, width, 20), pickupMsg);
		}
	}


}

It seems to me that to pick up an object, its transform should be moved upwards, not forward. You’re moving it forward in your lerp:

Vector3.Lerp (o.transform.position, mainCamera.transform.position + mainCamera.transform.forward * distance, Time.deltaTime * smooth);

What happens if you change this to:

Vector3.Lerp (o.transform.position, mainCamera.transform.position + mainCamera.transform.up * distance, Time.deltaTime * smooth);

Would that work?